Mercurial > hg > forks > UniversalIndentGUI
changeset 396:2922ce7885fb
Set the SVN line ending property for some shell scripts to platform dependent.
git-svn-id: svn://svn.code.sf.net/p/universalindent/code/trunk@625 59b1889a-e5ac-428c-b0c7-476e01d41282
author | thomas_-_s <thomas_-_s@59b1889a-e5ac-428c-b0c7-476e01d41282> |
---|---|
date | Fri, 25 Jan 2008 15:45:34 +0000 |
parents | 9f239b87fdfc |
children | 65752d5b5d74 |
files | buildRelease.sh indenters/perltidy |
diffstat | 2 files changed, 3122 insertions(+), 3122 deletions(-) [+] |
line wrap: on
line diff
--- a/buildRelease.sh Fri Jan 25 15:43:43 2008 +0000 +++ b/buildRelease.sh Fri Jan 25 15:45:34 2008 +0000 @@ -1,398 +1,398 @@ -#!/bin/sh - -# Command line syntax: -# buildRelease [targetsystem qtdir] -# Example: -# buildRelease win32 /c/qt.4.3.2 -# Default values are targetsystem=src, qtdir="" - -# 1. param is target system -if [ -n "$1" ]; then - targetSystem=$1 -else - targetSystem="src" -fi - -# 2. param, which is QTDIR -if [ -n "$2" ]; then - QTDIR=$2 -fi - -# Only allow the build targets win32, macx and linux. -if [ -n "$1" ] && [ ! "$1" = "win32" ] && [ ! "$1" = "macx" ] && [ ! "$1" = "linux" ] && [ ! "$1" = "src" ]; then - echo "ERROR: Build target \"$1\" not supported! Supported are win32, macx, linux and src." - exit 1 -fi - -if [ "$targetSystem" = "win32" ]; then - ext=".exe" -else - ext="" -fi - -if [ "$targetSystem" = "win32" ] || [ "$targetSystem" = "macx" ]; then - targetName=UniversalIndentGUI # The targetname must be identical with the targetname set in the qmake project file. - QMAKESPEC=${targetSystem}-g++ -else - targetName=universalindentgui # The targetname must be identical with the targetname set in the qmake project file. -fi -targetDir=${targetName}_$targetSystem - -# Configuration -# ------------- -version=0.8.0 -doSVNUpdate=false -languages="de zh_TW ja_JP" - -# Set QTDIR and QMAKESPEC for each platform -if [ "$targetSystem" = "win32" ] && [ ! -n "$2" ]; then - QTDIR=/c/Programmierung/qt.4.3.2_gcc -else - if [ "$targetSystem" = "macx" ] && [ ! -n "$2" ]; then - QTDIR=/Users/thomas/Documents/Informatik/qt-static-release - fi -fi - -echo "Making some environment settings" -echo "--------------------------------" -export QTDIR -PATH=$QTDIR/bin:$PATH -export PATH -export QMAKESPEC -echo "Done" -echo "" - - -echo "Delete old target dir and create new one" -echo "----------------------------------------" -if [ -d "$targetDir" ]; then - rm -r $targetDir &> /dev/null -fi -if [ $? -gt 0 ]; then - echo "ERROR: Deleting dir $targetDir failed!" - exit 1 -fi - -# wait a second for the old target dir to be really deleted -sleep 3 - -mkdir $targetDir &> /dev/null -if [ $? -gt 0 ]; then - echo "ERROR: Creating dir $targetDir failed!" - exit 1 -fi -mkdir $targetDir/indenters &> /dev/null -if [ $? -gt 0 ]; then - echo "ERROR: Creating dir indenters failed!" - exit 1 -fi -mkdir $targetDir/doc &> /dev/null -if [ $? -gt 0 ]; then - echo "ERROR: Creating dir doc failed!" - exit 1 -fi -mkdir $targetDir/translations &> /dev/null -if [ $? -gt 0 ]; then - echo "ERROR: Creating dir translations failed!" - exit 1 -fi -mkdir $targetDir/config &> /dev/null -if [ $? -gt 0 ]; then - echo "ERROR: Creating dir config failed!" - exit 1 -fi -# In case of source files as target system, create additional dirs. -if [ "$targetSystem" = "src" ]; then - mkdir $targetDir/resources &> /dev/null - if [ $? -gt 0 ]; then - echo "ERROR: Creating dir resources failed!" - exit 1 - fi - mkdir $targetDir/src &> /dev/null - if [ $? -gt 0 ]; then - echo "ERROR: Creating dir src failed!" - exit 1 - fi -fi -echo "Done" -echo "" - - -# Maybe do a SubVersion update. -if [ "$doSVNUpdate" = "true" ]; then - echo "Calling svn update" - echo "------------------" - svn update - if [ $? -gt 0 ]; then - echo "ERROR: Calling svn update failed!" - exit 1 - fi - echo "Done" - echo "" -fi - -echo "Updating the translation files" -echo "------------------------------" -lupdate src -ts ./translations/universalindent.ts &> /dev/null -if [ $? -gt 0 ]; then - echo "ERROR: Could not update file \"universalindent.ts\"!" - exit 1 -fi -for i in $languages -do - lupdate src -ts ./translations/universalindent_$i.ts &> /dev/null - if [ $? -gt 0 ]; then - echo "ERROR: Could not update file \"universalindent_$i.ts\"!" - exit 1 - fi -done -echo "Done" -echo "" - -###################### source release begin ######################## -if [ "$targetSystem" = "src" ]; then - -echo "Copying the translation files to the target translation dir" -echo "-----------------------------------------------------------" -cp ./translations/universalindent.ts ./$targetDir/translations/ &> /dev/null -if [ $? -gt 0 ]; then - echo "ERROR: Could not copy file \"universalindent.ts\"!" - exit 1 -fi -for i in $languages -do - cp ./translations/universalindent_$i.ts ./$targetDir/translations/ &> /dev/null - if [ $? -gt 0 ]; then - echo "ERROR: Could not copy file \"universalindent_$i.ts\"!" - exit 1 - fi -done -echo "Done" -echo "" - - -echo "Copying the resources and src files to the target dir" -echo "-----------------------------------------------------" -cp ./resources/* ./$targetDir/resources/ &> /dev/null -if [ $? -gt 0 ]; then - echo "ERROR: Could not copy dir \"resources\"!" - exit 1 -fi -cp ./src/* ./$targetDir/src/ &> /dev/null -if [ $? -gt 0 ]; then - echo "ERROR: Could not copy dir \"src\"!" - exit 1 -fi -echo "Done" -echo "" - -###################### source release end ######################## -else -###################### binary release begin ######################## - -echo "Cleaning up release/debug dirs" -echo "------------------------------" -if [ -d "release" ]; then - rm -r release &> /dev/null -fi -if [ $? -gt 0 ]; then - echo "ERROR: Could not delete release dir!" - exit 1 -fi -if [ -d "debug" ]; then - rm -r debug &> /dev/null -fi -if [ $? -gt 0 ]; then - echo "ERROR: Could not delete debug dir!" - exit 1 -fi -echo "Done" -echo "" - - -echo "Calling qmake" -echo "-------------" -qmake -if [ $? -gt 0 ]; then - echo "ERROR: Calling qmake failed!" - exit 1 -fi -echo "Done" -echo "" - - -echo "Calling make release" -echo "--------------------" -make release --silent -if [ $? -gt 0 ]; then - echo "ERROR: Calling make release failed!" - exit 1 -fi -echo "Done" -echo "" - - -echo "Copying ${targetName}$ext to target dir" -echo "--------------------------------------------" -cp ./release/$targetName$ext ./$targetDir/ &> /dev/null -if [ $? -gt 0 ]; then - echo "ERROR: Could not copy file \"$targetName$ext\"!" - exit 1 -fi -echo "Done" -echo "" - - -echo "Copying the indenter executable files to the target indenters dir" -echo "-----------------------------------------------------------------" -indenters="astyle$ext astyle.html bcpp$ext bcpp.txt csstidy$ext greatcode.exe greatcode.txt indent$ext indent.html tidy$ext tidy.html uncrustify$ext uncrustify.txt" -if [ "$ext" = ".exe" ]; then - indenters="$indenters libiconv-2.dll libintl-2.dll" -fi -for i in $indenters -do - cp ./indenters/$i ./$targetDir/indenters/ &> /dev/null - if [ $? -gt 0 ]; then - echo "ERROR: Could not copy file \"$i\"!" - exit 1 - fi -done -echo "Done" -echo "" - - -echo "Generating the translation binaries" -echo "-----------------------------------" -for i in $languages -do - lrelease ./translations/universalindent_$i.ts -qm ./translations/universalindent_$i.qm - if [ $? -gt 0 ]; then - echo "ERROR: Could not create translation file \"universalindent_$i.qm\"!" - exit 1 - fi -done -echo "Done" -echo "" - - -echo "Copying the translation binaries to the target translation dir" -echo "--------------------------------------------------------------" -cp ./translations/qt_de.qm ./$targetDir/translations/ &> /dev/null -cp ./translations/qt_ja_jp.qm ./$targetDir/translations/qt_ja_JP.qm &> /dev/null -for i in $languages -do - cp ./translations/universalindent_$i.qm ./$targetDir/translations/ &> /dev/null - if [ $? -gt 0 ]; then - echo "ERROR: Could not copy file \"universalindent_$i.qm\"!" - exit 1 - fi -done -echo "Done" -echo "" - -fi -###################### binary release end ######################## - -###################### Steps to be done for all ######################## - -echo "Copying the script based indenters to the target indenters dir" -echo "--------------------------------------------------------------" -indenters="JsDecoder.js perltidy PerlTidyLib.pm shellindent.awk" -for i in $indenters -do - cp ./indenters/$i ./$targetDir/indenters/ &> /dev/null - if [ $? -gt 0 ]; then - echo "ERROR: Could not copy file \"$i\"!" - exit 1 - fi -done -echo "Done" -echo "" - -echo "Copying the indenter example files to the target indenters dir" -echo "--------------------------------------------------------------" -cp ./indenters/example.* ./$targetDir/indenters/ &> /dev/null -if [ $? -gt 0 ]; then - echo "ERROR: Could not copy the example.* files!" - exit 1 -fi -echo "Done" -echo "" - - -echo "Copying the indenter uigui ini files to the target indenters dir" -echo "----------------------------------------------------------------" -cp ./indenters/uigui*.ini ./$targetDir/indenters/ &> /dev/null -if [ $? -gt 0 ]; then - echo "ERROR: Could not copy the uigui*.ini files!" - exit 1 -fi -echo "Done" -echo "" - - -echo "Copying the default syntax highlight ini file to the target config dir" -echo "----------------------------------------------------------------------" -cp ./config/UiGuiSyntaxHighlightConfig.ini ./$targetDir/config/ &> /dev/null -if [ $? -gt 0 ]; then - echo "ERROR: Could not copy the UiGuiSyntaxHighlightConfig.ini file!" - exit 1 -fi -echo "Done" -echo "" - - -echo "Copying some other files (README, CHANGELOG etc)" -echo "------------------------------------------------" -otherfiles="CHANGELOG.txt LICENSE.GPL INSTALL.txt README.txt" -for i in $otherfiles -do - cp ./$i ./$targetDir/ &> /dev/null - if [ $? -gt 0 ]; then - echo "ERROR: Could not copy file \"$i\"!" - exit 1 - fi -done -echo "Done" -echo "" - - -echo "Copying doc to target dir" -echo "-------------------------" -docfiles="iniFileFormat.html" -if [ ! "$ext" = ".exe" ]; then - indenters="$docfiles universalindentgui.man" -fi -for i in $docfiles -do - cp ./doc/$i ./$targetDir/doc/ &> /dev/null - if [ $? -gt 0 ]; then - echo "ERROR: Could not copy file \"$i\"!" - exit 1 - fi -done -echo "Done" -echo "" - - -echo "Packing the whole target dir" -echo "----------------------------" -if [ "$ext" = ".exe" ]; then - zip -r9 ${targetName}_${version}_$targetSystem.zip $targetDir &> /dev/null - if [ $? -gt 0 ]; then - echo "ERROR: Could not create archive \"${targetName}_${version}_$targetSystem.zip\"!" - exit 1 - fi -else - tar czf ${targetName}_${version}_$targetSystem.tar.gz $targetDir &> /dev/null - if [ $? -gt 0 ]; then - echo "ERROR: Could not create archive \"${targetName}_${version}_$targetSystem.tar.gz\"!" - exit 1 - fi -fi -echo "Done" -echo "" - - -echo "Everything completed successfully!" -#read -p "press any key to continue" +#!/bin/sh + +# Command line syntax: +# buildRelease [targetsystem qtdir] +# Example: +# buildRelease win32 /c/qt.4.3.2 +# Default values are targetsystem=src, qtdir="" + +# 1. param is target system +if [ -n "$1" ]; then + targetSystem=$1 +else + targetSystem="src" +fi + +# 2. param, which is QTDIR +if [ -n "$2" ]; then + QTDIR=$2 +fi + +# Only allow the build targets win32, macx and linux. +if [ -n "$1" ] && [ ! "$1" = "win32" ] && [ ! "$1" = "macx" ] && [ ! "$1" = "linux" ] && [ ! "$1" = "src" ]; then + echo "ERROR: Build target \"$1\" not supported! Supported are win32, macx, linux and src." + exit 1 +fi + +if [ "$targetSystem" = "win32" ]; then + ext=".exe" +else + ext="" +fi + +if [ "$targetSystem" = "win32" ] || [ "$targetSystem" = "macx" ]; then + targetName=UniversalIndentGUI # The targetname must be identical with the targetname set in the qmake project file. + QMAKESPEC=${targetSystem}-g++ +else + targetName=universalindentgui # The targetname must be identical with the targetname set in the qmake project file. +fi +targetDir=${targetName}_$targetSystem + +# Configuration +# ------------- +version=0.8.0 +doSVNUpdate=false +languages="de zh_TW ja_JP" + +# Set QTDIR and QMAKESPEC for each platform +if [ "$targetSystem" = "win32" ] && [ ! -n "$2" ]; then + QTDIR=/c/Programmierung/qt.4.3.2_gcc +else + if [ "$targetSystem" = "macx" ] && [ ! -n "$2" ]; then + QTDIR=/Users/thomas/Documents/Informatik/qt-static-release + fi +fi + +echo "Making some environment settings" +echo "--------------------------------" +export QTDIR +PATH=$QTDIR/bin:$PATH +export PATH +export QMAKESPEC +echo "Done" +echo "" + + +echo "Delete old target dir and create new one" +echo "----------------------------------------" +if [ -d "$targetDir" ]; then + rm -r $targetDir &> /dev/null +fi +if [ $? -gt 0 ]; then + echo "ERROR: Deleting dir $targetDir failed!" + exit 1 +fi + +# wait a second for the old target dir to be really deleted +sleep 3 + +mkdir $targetDir &> /dev/null +if [ $? -gt 0 ]; then + echo "ERROR: Creating dir $targetDir failed!" + exit 1 +fi +mkdir $targetDir/indenters &> /dev/null +if [ $? -gt 0 ]; then + echo "ERROR: Creating dir indenters failed!" + exit 1 +fi +mkdir $targetDir/doc &> /dev/null +if [ $? -gt 0 ]; then + echo "ERROR: Creating dir doc failed!" + exit 1 +fi +mkdir $targetDir/translations &> /dev/null +if [ $? -gt 0 ]; then + echo "ERROR: Creating dir translations failed!" + exit 1 +fi +mkdir $targetDir/config &> /dev/null +if [ $? -gt 0 ]; then + echo "ERROR: Creating dir config failed!" + exit 1 +fi +# In case of source files as target system, create additional dirs. +if [ "$targetSystem" = "src" ]; then + mkdir $targetDir/resources &> /dev/null + if [ $? -gt 0 ]; then + echo "ERROR: Creating dir resources failed!" + exit 1 + fi + mkdir $targetDir/src &> /dev/null + if [ $? -gt 0 ]; then + echo "ERROR: Creating dir src failed!" + exit 1 + fi +fi +echo "Done" +echo "" + + +# Maybe do a SubVersion update. +if [ "$doSVNUpdate" = "true" ]; then + echo "Calling svn update" + echo "------------------" + svn update + if [ $? -gt 0 ]; then + echo "ERROR: Calling svn update failed!" + exit 1 + fi + echo "Done" + echo "" +fi + +echo "Updating the translation files" +echo "------------------------------" +lupdate src -ts ./translations/universalindent.ts &> /dev/null +if [ $? -gt 0 ]; then + echo "ERROR: Could not update file \"universalindent.ts\"!" + exit 1 +fi +for i in $languages +do + lupdate src -ts ./translations/universalindent_$i.ts &> /dev/null + if [ $? -gt 0 ]; then + echo "ERROR: Could not update file \"universalindent_$i.ts\"!" + exit 1 + fi +done +echo "Done" +echo "" + +###################### source release begin ######################## +if [ "$targetSystem" = "src" ]; then + +echo "Copying the translation files to the target translation dir" +echo "-----------------------------------------------------------" +cp ./translations/universalindent.ts ./$targetDir/translations/ &> /dev/null +if [ $? -gt 0 ]; then + echo "ERROR: Could not copy file \"universalindent.ts\"!" + exit 1 +fi +for i in $languages +do + cp ./translations/universalindent_$i.ts ./$targetDir/translations/ &> /dev/null + if [ $? -gt 0 ]; then + echo "ERROR: Could not copy file \"universalindent_$i.ts\"!" + exit 1 + fi +done +echo "Done" +echo "" + + +echo "Copying the resources and src files to the target dir" +echo "-----------------------------------------------------" +cp ./resources/* ./$targetDir/resources/ &> /dev/null +if [ $? -gt 0 ]; then + echo "ERROR: Could not copy dir \"resources\"!" + exit 1 +fi +cp ./src/* ./$targetDir/src/ &> /dev/null +if [ $? -gt 0 ]; then + echo "ERROR: Could not copy dir \"src\"!" + exit 1 +fi +echo "Done" +echo "" + +###################### source release end ######################## +else +###################### binary release begin ######################## + +echo "Cleaning up release/debug dirs" +echo "------------------------------" +if [ -d "release" ]; then + rm -r release &> /dev/null +fi +if [ $? -gt 0 ]; then + echo "ERROR: Could not delete release dir!" + exit 1 +fi +if [ -d "debug" ]; then + rm -r debug &> /dev/null +fi +if [ $? -gt 0 ]; then + echo "ERROR: Could not delete debug dir!" + exit 1 +fi +echo "Done" +echo "" + + +echo "Calling qmake" +echo "-------------" +qmake +if [ $? -gt 0 ]; then + echo "ERROR: Calling qmake failed!" + exit 1 +fi +echo "Done" +echo "" + + +echo "Calling make release" +echo "--------------------" +make release --silent +if [ $? -gt 0 ]; then + echo "ERROR: Calling make release failed!" + exit 1 +fi +echo "Done" +echo "" + + +echo "Copying ${targetName}$ext to target dir" +echo "--------------------------------------------" +cp ./release/$targetName$ext ./$targetDir/ &> /dev/null +if [ $? -gt 0 ]; then + echo "ERROR: Could not copy file \"$targetName$ext\"!" + exit 1 +fi +echo "Done" +echo "" + + +echo "Copying the indenter executable files to the target indenters dir" +echo "-----------------------------------------------------------------" +indenters="astyle$ext astyle.html bcpp$ext bcpp.txt csstidy$ext greatcode.exe greatcode.txt indent$ext indent.html tidy$ext tidy.html uncrustify$ext uncrustify.txt" +if [ "$ext" = ".exe" ]; then + indenters="$indenters libiconv-2.dll libintl-2.dll" +fi +for i in $indenters +do + cp ./indenters/$i ./$targetDir/indenters/ &> /dev/null + if [ $? -gt 0 ]; then + echo "ERROR: Could not copy file \"$i\"!" + exit 1 + fi +done +echo "Done" +echo "" + + +echo "Generating the translation binaries" +echo "-----------------------------------" +for i in $languages +do + lrelease ./translations/universalindent_$i.ts -qm ./translations/universalindent_$i.qm + if [ $? -gt 0 ]; then + echo "ERROR: Could not create translation file \"universalindent_$i.qm\"!" + exit 1 + fi +done +echo "Done" +echo "" + + +echo "Copying the translation binaries to the target translation dir" +echo "--------------------------------------------------------------" +cp ./translations/qt_de.qm ./$targetDir/translations/ &> /dev/null +cp ./translations/qt_ja_jp.qm ./$targetDir/translations/qt_ja_JP.qm &> /dev/null +for i in $languages +do + cp ./translations/universalindent_$i.qm ./$targetDir/translations/ &> /dev/null + if [ $? -gt 0 ]; then + echo "ERROR: Could not copy file \"universalindent_$i.qm\"!" + exit 1 + fi +done +echo "Done" +echo "" + +fi +###################### binary release end ######################## + +###################### Steps to be done for all ######################## + +echo "Copying the script based indenters to the target indenters dir" +echo "--------------------------------------------------------------" +indenters="JsDecoder.js perltidy PerlTidyLib.pm shellindent.awk" +for i in $indenters +do + cp ./indenters/$i ./$targetDir/indenters/ &> /dev/null + if [ $? -gt 0 ]; then + echo "ERROR: Could not copy file \"$i\"!" + exit 1 + fi +done +echo "Done" +echo "" + +echo "Copying the indenter example files to the target indenters dir" +echo "--------------------------------------------------------------" +cp ./indenters/example.* ./$targetDir/indenters/ &> /dev/null +if [ $? -gt 0 ]; then + echo "ERROR: Could not copy the example.* files!" + exit 1 +fi +echo "Done" +echo "" + + +echo "Copying the indenter uigui ini files to the target indenters dir" +echo "----------------------------------------------------------------" +cp ./indenters/uigui*.ini ./$targetDir/indenters/ &> /dev/null +if [ $? -gt 0 ]; then + echo "ERROR: Could not copy the uigui*.ini files!" + exit 1 +fi +echo "Done" +echo "" + + +echo "Copying the default syntax highlight ini file to the target config dir" +echo "----------------------------------------------------------------------" +cp ./config/UiGuiSyntaxHighlightConfig.ini ./$targetDir/config/ &> /dev/null +if [ $? -gt 0 ]; then + echo "ERROR: Could not copy the UiGuiSyntaxHighlightConfig.ini file!" + exit 1 +fi +echo "Done" +echo "" + + +echo "Copying some other files (README, CHANGELOG etc)" +echo "------------------------------------------------" +otherfiles="CHANGELOG.txt LICENSE.GPL INSTALL.txt README.txt" +for i in $otherfiles +do + cp ./$i ./$targetDir/ &> /dev/null + if [ $? -gt 0 ]; then + echo "ERROR: Could not copy file \"$i\"!" + exit 1 + fi +done +echo "Done" +echo "" + + +echo "Copying doc to target dir" +echo "-------------------------" +docfiles="iniFileFormat.html" +if [ ! "$ext" = ".exe" ]; then + indenters="$docfiles universalindentgui.man" +fi +for i in $docfiles +do + cp ./doc/$i ./$targetDir/doc/ &> /dev/null + if [ $? -gt 0 ]; then + echo "ERROR: Could not copy file \"$i\"!" + exit 1 + fi +done +echo "Done" +echo "" + + +echo "Packing the whole target dir" +echo "----------------------------" +if [ "$ext" = ".exe" ]; then + zip -r9 ${targetName}_${version}_$targetSystem.zip $targetDir &> /dev/null + if [ $? -gt 0 ]; then + echo "ERROR: Could not create archive \"${targetName}_${version}_$targetSystem.zip\"!" + exit 1 + fi +else + tar czf ${targetName}_${version}_$targetSystem.tar.gz $targetDir &> /dev/null + if [ $? -gt 0 ]; then + echo "ERROR: Could not create archive \"${targetName}_${version}_$targetSystem.tar.gz\"!" + exit 1 + fi +fi +echo "Done" +echo "" + + +echo "Everything completed successfully!" +#read -p "press any key to continue"
--- a/indenters/perltidy Fri Jan 25 15:43:43 2008 +0000 +++ b/indenters/perltidy Fri Jan 25 15:45:34 2008 +0000 @@ -1,2724 +1,2724 @@ -#!/usr/bin/perl -package main; - -use lib "./"; -use lib "../indenters"; -use PerlTidyLib; - - -my $arg_string = undef; - -# give Macs a chance to provide command line parameters -if ($^O =~ /Mac/) { - $arg_string = - MacPerl::Ask( 'Please enter @ARGV (-h for help)', - defined $ARGV[0] ? "\"$ARGV[0]\"" : "" ); -} - -Perl::Tidy::perltidy(argv => $arg_string); - -__END__ - -=head1 NAME - -perltidy - a perl script indenter and reformatter - -=head1 SYNOPSIS - - perltidy [ options ] file1 file2 file3 ... - (output goes to file1.tdy, file2.tdy, file3.tdy, ...) - perltidy [ options ] file1 -o outfile - perltidy [ options ] file1 -st >outfile - perltidy [ options ] <infile >outfile - -=head1 DESCRIPTION - -Perltidy reads a perl script and writes an indented, reformatted script. - -Many users will find enough information in L<"EXAMPLES"> to get -started. New users may benefit from the short tutorial -which can be found at -http://perltidy.sourceforge.net/tutorial.html - -A convenient aid to systematically defining a set of style parameters -can be found at -http://perltidy.sourceforge.net/stylekey.html - -Perltidy can produce output on either of two modes, depending on the -existence of an B<-html> flag. Without this flag, the output is passed -through a formatter. The default formatting tries to follow the -recommendations in perlstyle(1), but it can be controlled in detail with -numerous input parameters, which are described in L<"FORMATTING -OPTIONS">. - -When the B<-html> flag is given, the output is passed through an HTML -formatter which is described in L<"HTML OPTIONS">. - -=head1 EXAMPLES - - perltidy somefile.pl - -This will produce a file F<somefile.pl.tdy> containing the script reformatted -using the default options, which approximate the style suggested in -perlstyle(1). Perltidy never changes the input file. - - perltidy *.pl - -Execute perltidy on all F<.pl> files in the current directory with the -default options. The output will be in files with an appended F<.tdy> -extension. For any file with an error, there will be a file with extension -F<.ERR>. - - perltidy -b file1.pl file2.pl - -Modify F<file1.pl> and F<file1.pl> in place, and backup the originals to -F<file1.pl.bak> and F<file2.pl.bak>. If F<file1.pl.bak> and/or F<file2.pl.bak> -already exist, they will be overwritten. - - perltidy -gnu somefile.pl - -Execute perltidy on file F<somefile.pl> with a style which approximates the -GNU Coding Standards for C programs. The output will be F<somefile.pl.tdy>. - - perltidy -i=3 somefile.pl - -Execute perltidy on file F<somefile.pl>, with 3 columns for each level of -indentation (B<-i=3>) instead of the default 4 columns. There will not be any -tabs in the reformatted script, except for any which already exist in comments, -pod documents, quotes, and here documents. Output will be F<somefile.pl.tdy>. - - perltidy -i=3 -et=8 somefile.pl - -Same as the previous example, except that leading whitespace will -be entabbed with one tab character per 8 spaces. - - perltidy -ce -l=72 somefile.pl - -Execute perltidy on file F<somefile.pl> with all defaults except use "cuddled -elses" (B<-ce>) and a maximum line length of 72 columns (B<-l=72>) instead of -the default 80 columns. - - perltidy -g somefile.pl - -Execute perltidy on file F<somefile.pl> and save a log file F<somefile.pl.LOG> -which shows the nesting of braces, parentheses, and square brackets at -the start of every line. - - perltidy -html somefile.pl - -This will produce a file F<somefile.pl.html> containing the script with -html markup. The output file will contain an embedded style sheet in -the <HEAD> section which may be edited to change the appearance. - - perltidy -html -css=mystyle.css somefile.pl - -This will produce a file F<somefile.pl.html> containing the script with -html markup. This output file will contain a link to a separate style -sheet file F<mystyle.css>. If the file F<mystyle.css> does not exist, -it will be created. If it exists, it will not be overwritten. - - perltidy -html -pre somefile.pl - -Write an html snippet with only the PRE section to F<somefile.pl.html>. -This is useful when code snippets are being formatted for inclusion in a -larger web page. No style sheet will be written in this case. - - perltidy -html -ss >mystyle.css - -Write a style sheet to F<mystyle.css> and exit. - - perltidy -html -frm mymodule.pm - -Write html with a frame holding a table of contents and the source code. The -output files will be F<mymodule.pm.html> (the frame), F<mymodule.pm.toc.html> -(the table of contents), and F<mymodule.pm.src.html> (the source code). - -=head1 OPTIONS - OVERVIEW - -The entire command line is scanned for options, and they are processed -before any files are processed. As a result, it does not matter -whether flags are before or after any filenames. However, the relative -order of parameters is important, with later parameters overriding the -values of earlier parameters. - -For each parameter, there is a long name and a short name. The short -names are convenient for keyboard input, while the long names are -self-documenting and therefore useful in scripts. It is customary to -use two leading dashes for long names, but one may be used. - -Most parameters which serve as on/off flags can be negated with a -leading "n" (for the short name) or a leading "no" or "no-" (for the -long name). For example, the flag to outdent long quotes is is B<-olq> -or B<--outdent-long-quotes>. The flag to skip this is B<-nolq> -or B<--nooutdent-long-quotes> or B<--no-outdent-long-quotes>. - -Options may not be bundled together. In other words, options B<-q> and -B<-g> may NOT be entered as B<-qg>. - -Option names may be terminated early as long as they are uniquely identified. -For example, instead of B<--dump-token-types>, it would be sufficient to enter -B<--dump-tok>, or even B<--dump-t>, to uniquely identify this command. - -=head2 I/O control - -The following parameters concern the files which are read and written. - -=over 4 - -=item B<-h>, B<--help> - -Show summary of usage and exit. - -=item B<-o>=filename, B<--outfile>=filename - -Name of the output file (only if a single input file is being -processed). If no output file is specified, and output is not -redirected to the standard output, the output will go to F<filename.tdy>. - -=item B<-st>, B<--standard-output> - -Perltidy must be able to operate on an arbitrarily large number of files -in a single run, with each output being directed to a different output -file. Obviously this would conflict with outputting to the single -standard output device, so a special flag, B<-st>, is required to -request outputting to the standard output. For example, - - perltidy somefile.pl -st >somefile.new.pl - -This option may only be used if there is just a single input file. -The default is B<-nst> or B<--nostandard-output>. - -=item B<-se>, B<--standard-error-output> - -If perltidy detects an error when processing file F<somefile.pl>, its -default behavior is to write error messages to file F<somefile.pl.ERR>. -Use B<-se> to cause all error messages to be sent to the standard error -output stream instead. This directive may be negated with B<-nse>. -Thus, you may place B<-se> in a F<.perltidyrc> and override it when -desired with B<-nse> on the command line. - -=item B<-oext>=ext, B<--output-file-extension>=ext - -Change the extension of the output file to be F<ext> instead of the -default F<tdy> (or F<html> in case the -B<-html> option is used). -See L<Specifying File Extensions>. - -=item B<-opath>=path, B<--output-path>=path - -When perltidy creates a filename for an output file, by default it merely -appends an extension to the path and basename of the input file. This -parameter causes the path to be changed to F<path> instead. - -The path should end in a valid path separator character, but perltidy will try -to add one if it is missing. - -For example - - perltidy somefile.pl -opath=/tmp/ - -will produce F</tmp/somefile.pl.tdy>. Otherwise, F<somefile.pl.tdy> will -appear in whatever directory contains F<somefile.pl>. - -If the path contains spaces, it should be placed in quotes. - -This parameter will be ignored if output is being directed to standard output, -or if it is being specified explicitly with the B<-o=s> parameter. - -=item B<-b>, B<--backup-and-modify-in-place> - -Modify the input file or files in-place and save the original with the -extension F<.bak>. Any existing F<.bak> file will be deleted. See next item -for changing the default backup extension. - -A B<-b> flag will be ignored if input is from standard input, or -if the B<-html> flag is set. - -=item B<-bext>=ext, B<--backup-file-extension>=ext - -Change the extension of the backup file to be something other than the -default F<.bak>. See L<Specifying File Extensions>. - -=item B<-w>, B<--warning-output> - -Setting B<-w> causes any non-critical warning -messages to be reported as errors. These include messages -about possible pod problems, possibly bad starting indentation level, -and cautions about indirect object usage. The default, B<-nw> or -B<--nowarning-output>, is not to include these warnings. - -=item B<-q>, B<--quiet> - -Deactivate error messages and syntax checking (for running under -an editor). - -For example, if you use a vi-style editor, such as vim, you may execute -perltidy as a filter from within the editor using something like - - :n1,n2!perltidy -q - -where C<n1,n2> represents the selected text. Without the B<-q> flag, -any error message may mess up your screen, so be prepared to use your -"undo" key. - -=item B<-log>, B<--logfile> - -Save the F<.LOG> file, which has many useful diagnostics. Perltidy always -creates a F<.LOG> file, but by default it is deleted unless a program bug is -suspected. Setting the B<-log> flag forces the log file to be saved. - -=item B<-g=n>, B<--logfile-gap=n> - -Set maximum interval between input code lines in the logfile. This purpose of -this flag is to assist in debugging nesting errors. The value of C<n> is -optional. If you set the flag B<-g> without the value of C<n>, it will be -taken to be 1, meaning that every line will be written to the log file. This -can be helpful if you are looking for a brace, paren, or bracket nesting error. - -Setting B<-g> also causes the logfile to be saved, so it is not necessary to -also include B<-log>. - -If no B<-g> flag is given, a value of 50 will be used, meaning that at least -every 50th line will be recorded in the logfile. This helps prevent -excessively long log files. - -Setting a negative value of C<n> is the same as not setting B<-g> at all. - -=item B<-npro> B<--noprofile> - -Ignore any F<.perltidyrc> command file. Normally, perltidy looks first in -your current directory for a F<.perltidyrc> file of parameters. (The format -is described below). If it finds one, it applies those options to the -initial default values, and then it applies any that have been defined -on the command line. If no F<.perltidyrc> file is found, it looks for one -in your home directory. - -If you set the B<-npro> flag, perltidy will not look for this file. - -=item B<-pro=filename> or B<--profile=filename> - -To simplify testing and switching .perltidyrc files, this command may be -used to specify a configuration file which will override the default -name of .perltidyrc. There must not be a space on either side of the -'=' sign. For example, the line - - perltidy -pro=testcfg - -would cause file F<testcfg> to be used instead of the -default F<.perltidyrc>. - -=item B<-opt>, B<--show-options> - -Write a list of all options used to the F<.LOG> file. -Please see B<--dump-options> for a simpler way to do this. - -=item B<-f>, B<--force-read-binary> - -Force perltidy to process binary files. To avoid producing excessive -error messages, perltidy skips files identified by the system as non-text. -However, valid perl scripts containing binary data may sometimes be identified -as non-text, and this flag forces perltidy to process them. - -=back - -=head1 FORMATTING OPTIONS - -=head2 Basic Options - -=over 4 - -=item B<-l=n>, B<--maximum-line-length=n> - -The default maximum line length is n=80 characters. Perltidy will try -to find line break points to keep lines below this length. However, long -quotes and side comments may cause lines to exceed this length. -Setting B<-l=0> is equivalent to setting B<-l=(a large number)>. - -=item B<-i=n>, B<--indent-columns=n> - -Use n columns per indentation level (default n=4). - -=item tabs - -Using tab characters will almost certainly lead to future portability -and maintenance problems, so the default and recommendation is not to -use them. For those who prefer tabs, however, there are two different -options. - -Except for possibly introducing tab indentation characters, as outlined -below, perltidy does not introduce any tab characters into your file, -and it removes any tabs from the code (unless requested not to do so -with B<-fws>). If you have any tabs in your comments, quotes, or -here-documents, they will remain. - -=over 4 - -=item B<-et=n>, B<--entab-leading-whitespace> - -This flag causes each B<n> initial space characters to be replaced by -one tab character. Note that the integer B<n> is completely independent -of the integer specified for indentation parameter, B<-i=n>. - -=item B<-t>, B<--tabs> - -This flag causes one leading tab character to be inserted for each level -of indentation. Certain other features are incompatible with this -option, and if these options are also given, then a warning message will -be issued and this flag will be unset. One example is the B<-lp> -option. - -=back - -=item B<-syn>, B<--check-syntax> - -This flag causes perltidy to run C<perl -c -T> to check syntax of input -and output. (To change the flags passed to perl, see the next -item, B<-pscf>). The results are written to the F<.LOG> file, which -will be saved if an error is detected in the output script. The output -script is not checked if the input script has a syntax error. Perltidy -does its own checking, but this option employs perl to get a "second -opinion". - -If perl reports errors in the input file, they will not be reported in -the error output unless the B<--warning-output> flag is given. - -The default is B<not> to do this type of syntax checking (although -perltidy will still do as much self-checking as possible). The reason -is that it causes all code in BEGIN blocks to be executed, for all -modules being used, and this opens the door to security issues and -infinite loops when running perltidy. - -=item B<-pscf=s>, B<-perl-syntax-check-flags=s> - -When perl is invoked to check syntax, the normal flags are C<-c -T>. In -addition, if the B<-x> flag is given to perltidy, then perl will also be -passed a B<-x> flag. It should not normally be necessary to change -these flags, but it can be done with the B<-pscf=s> flag. For example, -if the taint flag, C<-T>, is not wanted, the flag could be set to be just -B<-pscf=-c>. - -Perltidy will pass your string to perl with the exception that it will -add a B<-c> and B<-x> if appropriate. The F<.LOG> file will show -exactly what flags were passed to perl. - -=item B<-io>, B<--indent-only> - -This flag is used to deactivate all formatting and line break changes. -When it is in effect, the only change to the script will be indentation. -And any flags controlling whitespace and newlines will be ignored. You -might want to use this if you are perfectly happy with your whitespace -and line breaks, and merely want perltidy to handle the indentation. -(This also speeds up perltidy by well over a factor of two, so it might be -useful when perltidy is merely being used to help find a brace error in -a large script). - -Setting this flag is equivalent to setting B<--freeze-newlines> and -B<--freeze-whitespace>. - -=item B<-ole=s>, B<--output-line-ending=s> - -where s=C<win>, C<dos>, C<unix>, or C<mac>. This flag tells perltidy -to output line endings for a specific system. Normally, -perltidy writes files with the line separator character of the host -system. The C<win> and C<dos> flags have an identical result. - -=item B<-ple>, B<--preserve-line-endings> - -This flag tells perltidy to write its output files with the same line -endings as the input file, if possible. It should work for -B<dos>, B<unix>, and B<mac> line endings. It will only work if perltidy -input comes from a filename (rather than stdin, for example). If -perltidy has trouble determining the input file line ending, it will -revert to the default behavior of using the line ending of the host system. - -=back - -=head2 Code Indentation Control - -=over 4 - -=item B<-ci=n>, B<--continuation-indentation=n> - -Continuation indentation is extra indentation spaces applied when -a long line is broken. The default is n=2, illustrated here: - - my $level = # -ci=2 - ( $max_index_to_go >= 0 ) ? $levels_to_go[0] : $last_output_level; - -The same example, with n=0, is a little harder to read: - - my $level = # -ci=0 - ( $max_index_to_go >= 0 ) ? $levels_to_go[0] : $last_output_level; - -The value given to B<-ci> is also used by some commands when a small -space is required. Examples are commands for outdenting labels, -B<-ola>, and control keywords, B<-okw>. - -When default values are not used, it is suggested that the value B<n> -given with B<-ci=n> be no more than about one-half of the number of -spaces assigned to a full indentation level on the B<-i=n> command. - -=item B<-sil=n> B<--starting-indentation-level=n> - -By default, perltidy examines the input file and tries to determine the -starting indentation level. While it is often zero, it may not be -zero for a code snippet being sent from an editing session. If the -default method does not work correctly, or you want to change the -starting level, use B<-sil=n>, to force the starting level to be n. - -=item List indentation using B<-lp>, B<--line-up-parentheses> - -By default, perltidy indents lists with 4 spaces, or whatever value -is specified with B<-i=n>. Here is a small list formatted in this way: - - # perltidy (default) - @month_of_year = ( - 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', - 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' - ); - -Use the B<-lp> flag to add extra indentation to cause the data to begin -past the opening parentheses of a sub call or list, or opening square -bracket of an anonymous array, or opening curly brace of an anonymous -hash. With this option, the above list would become: - - # perltidy -lp - @month_of_year = ( - 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', - 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' - ); - -If the available line length (see B<-l=n> ) does not permit this much -space, perltidy will use less. For alternate placement of the -closing paren, see the next section. - -This option has no effect on code BLOCKS, such as if/then/else blocks, -which always use whatever is specified with B<-i=n>. Also, the -existence of line breaks and/or block comments between the opening and -closing parens may cause perltidy to temporarily revert to its default -method. - -Note: The B<-lp> option may not be used together with the B<-t> tabs option. -It may, however, be used with the B<-et=n> tab method. - -In addition, any parameter which significantly restricts the ability of -perltidy to choose newlines will conflict with B<-lp> and will cause -B<-lp> to be deactivated. These include B<-io>, B<-fnl>, B<-nanl>, and -B<-ndnl>. The reason is that the B<-lp> indentation style can require -the careful coordination of an arbitrary number of break points in -hierarchical lists, and these flags may prevent that. - -=item B<-cti=n>, B<--closing-token-indentation> - -The B<-cti=n> flag controls the indentation of a line beginning with -a C<)>, C<]>, or a non-block C<}>. Such a line receives: - - -cti = 0 no extra indentation (default) - -cti = 1 extra indentation such that the closing token - aligns with its opening token. - -cti = 2 one extra indentation level if the line looks like: - ); or ]; or }; - -cti = 3 one extra indentation level always - -The flags B<-cti=1> and B<-cti=2> work well with the B<-lp> flag (previous -section). - - # perltidy -lp -cti=1 - @month_of_year = ( - 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', - 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' - ); - - # perltidy -lp -cti=2 - @month_of_year = ( - 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', - 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' - ); - -These flags are merely hints to the formatter and they may not always be -followed. In particular, if -lp is not being used, the indentation for -B<cti=1> is constrained to be no more than one indentation level. - -If desired, this control can be applied independently to each of the -closing container token types. In fact, B<-cti=n> is merely an -abbreviation for B<-cpi=n -csbi=n -cbi=n>, where: -B<-cpi> or B<--closing-paren-indentation> controls B<)>'s, -B<-csbi> or B<--closing-square-bracket-indentation> controls B<]>'s, -B<-cbi> or B<--closing-brace-indentation> controls non-block B<}>'s. - -=item B<-icp>, B<--indent-closing-paren> - -The B<-icp> flag is equivalent to -B<-cti=2>, described in the previous section. The B<-nicp> flag is -equivalent B<-cti=0>. They are included for backwards compatability. - -=item B<-icb>, B<--indent-closing-brace> - -The B<-icb> option gives one extra level of indentation to a brace which -terminates a code block . For example, - - if ($task) { - yyy(); - } # -icb - else { - zzz(); - } - -The default is not to do this, indicated by B<-nicb>. - -=item B<-olq>, B<--outdent-long-quotes> - -When B<-olq> is set, lines which is a quoted string longer than the -value B<maximum-line-length> will have their indentation removed to make -them more readable. This is the default. To prevent such out-denting, -use B<-nolq> or B<--nooutdent-long-lines>. - -=item B<-oll>, B<--outdent-long-lines> - -This command is equivalent to B<--outdent-long-quotes> and -B<--outdent-long-comments>, and it is included for compatibility with previous -versions of perltidy. The negation of this also works, B<-noll> or -B<--nooutdent-long-lines>, and is equivalent to setting B<-nolq> and B<-nolc>. - -=item Outdenting Labels: B<-ola>, B<--outdent-labels> - -This command will cause labels to be outdented by 2 spaces (or whatever B<-ci> -has been set to), if possible. This is the default. For example: - - my $i; - LOOP: while ( $i = <FOTOS> ) { - chomp($i); - next unless $i; - fixit($i); - } - -Use B<-nola> to not outdent labels. - -=item Outdenting Keywords - -=over 4 - -=item B<-okw>, B<--outdent-keywords> - -The command B<-okw> will will cause certain leading control keywords to -be outdented by 2 spaces (or whatever B<-ci> has been set to), if -possible. By default, these keywords are C<redo>, C<next>, C<last>, -C<goto>, and C<return>. The intention is to make these control keywords -easier to see. To change this list of keywords being outdented, see -the next section. - -For example, using C<perltidy -okw> on the previous example gives: - - my $i; - LOOP: while ( $i = <FOTOS> ) { - chomp($i); - next unless $i; - fixit($i); - } - -The default is not to do this. - -=item Specifying Outdented Keywords: B<-okwl=string>, B<--outdent-keyword-list=string> - -This command can be used to change the keywords which are outdented with -the B<-okw> command. The parameter B<string> is a required list of perl -keywords, which should be placed in quotes if there are more than one. -By itself, it does not cause any outdenting to occur, so the B<-okw> -command is still required. - -For example, the commands C<-okwl="next last redo goto" -okw> will cause -those four keywords to be outdented. It is probably simplest to place -any B<-okwl> command in a F<.perltidyrc> file. - -=back - -=back - -=head2 Whitespace Control - -Whitespace refers to the blank space between variables, operators, -and other code tokens. - -=over 4 - -=item B<-fws>, B<--freeze-whitespace> - -This flag causes your original whitespace to remain unchanged, and -causes the rest of the whitespace commands in this section, the -Code Indentation section, and -the Comment Control section to be ignored. - -=item Tightness of curly braces, parentheses, and square brackets. - -Here the term "tightness" will mean the closeness with which -pairs of enclosing tokens, such as parentheses, contain the quantities -within. A numerical value of 0, 1, or 2 defines the tightness, with -0 being least tight and 2 being most tight. Spaces within containers -are always symmetric, so if there is a space after a C<(> then there -will be a space before the corresponding C<)>. - -The B<-pt=n> or B<--paren-tightness=n> parameter controls the space within -parens. The example below shows the effect of the three possible -values, 0, 1, and 2: - - if ( ( my $len_tab = length( $tabstr ) ) > 0 ) { # -pt=0 - if ( ( my $len_tab = length($tabstr) ) > 0 ) { # -pt=1 (default) - if ((my $len_tab = length($tabstr)) > 0) { # -pt=2 - -When n is 0, there is always a space to the right of a '(' and to the left -of a ')'. For n=2 there is never a space. For n=1, the default, there -is a space unless the quantity within the parens is a single token, such -as an identifier or quoted string. - -Likewise, the parameter B<-sbt=n> or B<--square-bracket-tightness=n> -controls the space within square brackets, as illustrated below. - - $width = $col[ $j + $k ] - $col[ $j ]; # -sbt=0 - $width = $col[ $j + $k ] - $col[$j]; # -sbt=1 (default) - $width = $col[$j + $k] - $col[$j]; # -sbt=2 - -Curly braces which do not contain code blocks are controlled by -the parameter B<-bt=n> or B<--brace-tightness=n>. - - $obj->{ $parsed_sql->{ 'table' }[0] }; # -bt=0 - $obj->{ $parsed_sql->{'table'}[0] }; # -bt=1 (default) - $obj->{$parsed_sql->{'table'}[0]}; # -bt=2 - -And finally, curly braces which contain blocks of code are controlled by the -parameter B<-bbt=n> or B<--block-brace-tightness=n> as illustrated in the -example below. - - %bf = map { $_ => -M $_ } grep { /\.deb$/ } dirents '.'; # -bbt=0 (default) - %bf = map { $_ => -M $_ } grep {/\.deb$/} dirents '.'; # -bbt=1 - %bf = map {$_ => -M $_} grep {/\.deb$/} dirents '.'; # -bbt=2 - -=item B<-sts>, B<--space-terminal-semicolon> - -Some programmers prefer a space before all terminal semicolons. The -default is for no such space, and is indicated with B<-nsts> or -B<--nospace-terminal-semicolon>. - - $i = 1 ; # -sts - $i = 1; # -nsts (default) - -=item B<-sfs>, B<--space-for-semicolon> - -Semicolons within B<for> loops may sometimes be hard to see, -particularly when commas are also present. This option places spaces on -both sides of these special semicolons, and is the default. Use -B<-nsfs> or B<--nospace-for-semicolon> to deactivate it. - - for ( @a = @$ap, $u = shift @a ; @a ; $u = $v ) { # -sfs (default) - for ( @a = @$ap, $u = shift @a; @a; $u = $v ) { # -nsfs - -=item B<-asc>, B<--add-semicolons> - -Setting B<-asc> allows perltidy to add any missing optional semicolon at the end -of a line which is followed by a closing curly brace on the next line. This -is the default, and may be deactivated with B<-nasc> or B<--noadd-semicolons>. - -=item B<-dsm>, B<--delete-semicolons> - -Setting B<-dsm> allows perltidy to delete extra semicolons which are -simply empty statements. This is the default, and may be deactivated -with B<-ndsm> or B<--nodelete-semicolons>. (Such semicolons are not -deleted, however, if they would promote a side comment to a block -comment). - -=item B<-aws>, B<--add-whitespace> - -Setting this option allows perltidy to add certain whitespace improve -code readability. This is the default. If you do not want any -whitespace added, but are willing to have some whitespace deleted, use -B<-naws>. (Use B<-fws> to leave whitespace completely unchanged). - -=item B<-dws>, B<--delete-old-whitespace> - -Setting this option allows perltidy to remove some old whitespace -between characters, if necessary. This is the default. If you -do not want any old whitespace removed, use B<-ndws> or -B<--nodelete-old-whitespace>. - -=item Detailed whitespace controls around tokens - -For those who want more detailed control over the whitespace around -tokens, there are four parameters which can directly modify the default -whitespace rules built into perltidy for any token. They are: - -B<-wls=s> or B<--want-left-space=s>, - -B<-nwls=s> or B<--nowant-left-space=s>, - -B<-wrs=s> or B<--want-right-space=s>, - -B<-nwrs=s> or B<--nowant-right-space=s>. - -These parameters are each followed by a quoted string, B<s>, containing a -list of token types. No more than one of each of these parameters -should be specified, because repeating a command-line parameter -always overwrites the previous one before perltidy ever sees it. - -To illustrate how these are used, suppose it is desired that there be no -space on either side of the token types B<= + - / *>. The following two -parameters would specify this desire: - - -nwls="= + - / *" -nwrs="= + - / *" - -(Note that the token types are in quotes, and that they are separated by -spaces). With these modified whitespace rules, the following line of math: - - $root = -$b + sqrt( $b * $b - 4. * $a * $c ) / ( 2. * $a ); - -becomes this: - - $root=-$b+sqrt( $b*$b-4.*$a*$c )/( 2.*$a ); - -These parameters should be considered to be hints to perltidy rather -than fixed rules, because perltidy must try to resolve conflicts that -arise between them and all of the other rules that it uses. One -conflict that can arise is if, between two tokens, the left token wants -a space and the right one doesn't. In this case, the token not wanting -a space takes priority. - -It is necessary to have a list of all token types in order to create -this type of input. Such a list can be obtained by the command -B<--dump-token-types>. Also try the B<-D> flag on a short snippet of code -and look at the .DEBUG file to see the tokenization. - -B<WARNING> Be sure to put these tokens in quotes to avoid having them -misinterpreted by your command shell. - -=item Space between specific keywords and opening paren - -When an opening paren follows a Perl keyword, no space is introduced after the -keyword, unless it is (by default) one of these: - - my local our and or eq ne if else elsif until unless - while for foreach return switch case given when - -These defaults can be modified with two commands: - -B<-sak=s> or B<--space-after-keyword=s> adds keywords. - -B<-nsak=s> or B<--nospace-after-keyword=s> removes keywords. - -where B<s> is a list of keywords (in quotes if necessary). For example, - - my ( $a, $b, $c ) = @_; # default - my( $a, $b, $c ) = @_; # -nsak="my local our" - -To put a space after all keywords, see the next item. - -=item Space between all keywords and opening parens - -When an opening paren follows a function or keyword, no space is introduced -after the keyword except for the keywords noted in the previous item. To -always put a space between a function or keyword and its opening paren, -use the command: - -B<-skp> or B<--space-keyword-paren> - -You will probably also want to use the flag B<-sfp> (next item) too. - -=item Space between all function names and opening parens - -When an opening paren follows a function the default is not to introduce -a space. To cause a space to be introduced use: - -B<-sfp> or B<--space-function-paren> - - myfunc( $a, $b, $c ); # default - myfunc ( $a, $b, $c ); # -sfp - -You will probably also want to use the flag B<-skp> (previous item) too. - -=item Trimming whitespace around C<qw> quotes - -B<-tqw> or B<--trim-qw> provide the default behavior of trimming -spaces around multi-line C<qw> quotes and indenting them appropriately. - -B<-ntqw> or B<--notrim-qw> cause leading and trailing whitespace around -multi-line C<qw> quotes to be left unchanged. This option will not -normally be necessary, but was added for testing purposes, because in -some versions of perl, trimming C<qw> quotes changes the syntax tree. - -=back - -=head2 Comment Controls - -Perltidy has a number of ways to control the appearance of both block comments -and side comments. The term B<block comment> here refers to a full-line -comment, whereas B<side comment> will refer to a comment which appears on a -line to the right of some code. - -=over 4 - -=item B<-ibc>, B<--indent-block-comments> - -Block comments normally look best when they are indented to the same -level as the code which follows them. This is the default behavior, but -you may use B<-nibc> to keep block comments left-justified. Here is an -example: - - # this comment is indented (-ibc, default) - if ($task) { yyy(); } - -The alternative is B<-nibc>: - - # this comment is not indented (-nibc) - if ($task) { yyy(); } - -See also the next item, B<-isbc>, as well as B<-sbc>, for other ways to -have some indented and some outdented block comments. - -=item B<-isbc>, B<--indent-spaced-block-comments> - -If there is no leading space on the line, then the comment will not be -indented, and otherwise it may be. - -If both B<-ibc> and B<-isbc> are set, then B<-isbc> takes priority. - -=item B<-olc>, B<--outdent-long-comments> - -When B<-olc> is set, lines which are full-line (block) comments longer -than the value B<maximum-line-length> will have their indentation -removed. This is the default; use B<-nolc> to prevent outdenting. - -=item B<-msc=n>, B<--minimum-space-to-comment=n> - -Side comments look best when lined up several spaces to the right of -code. Perltidy will try to keep comments at least n spaces to the -right. The default is n=4 spaces. - -=item B<-fpsc=n>, B<--fixed-position-side-comment=n> - -This parameter tells perltidy to line up side comments in column number B<n> -whenever possible. The default, n=0, is not do do this. - -=item B<-hsc>, B<--hanging-side-comments> - -By default, perltidy tries to identify and align "hanging side -comments", which are something like this: - - my $IGNORE = 0; # This is a side comment - # This is a hanging side comment - # And so is this - -A comment is considered to be a hanging side comment if (1) it immediately -follows a line with a side comment, or another hanging side comment, and -(2) there is some leading whitespace on the line. -To deactivate this feature, use B<-nhsc> or B<--nohanging-side-comments>. -If block comments are preceded by a blank line, or have no leading -whitespace, they will not be mistaken as hanging side comments. - -=item Closing Side Comments - -A closing side comment is a special comment which perltidy can -automatically create and place after the closing brace of a code block. -They can be useful for code maintenance and debugging. The command -B<-csc> (or B<--closing-side-comments>) adds or updates closing side -comments. For example, here is a small code snippet - - sub message { - if ( !defined( $_[0] ) ) { - print("Hello, World\n"); - } - else { - print( $_[0], "\n" ); - } - } - -And here is the result of processing with C<perltidy -csc>: - - sub message { - if ( !defined( $_[0] ) ) { - print("Hello, World\n"); - } - else { - print( $_[0], "\n" ); - } - } ## end sub message - -A closing side comment was added for C<sub message> in this case, but not -for the C<if> and C<else> blocks, because they were below the 6 line -cutoff limit for adding closing side comments. This limit may be -changed with the B<-csci> command, described below. - -The command B<-dcsc> (or B<--delete-closing-side-comments>) reverses this -process and removes these comments. - -Several commands are available to modify the behavior of these two basic -commands, B<-csc> and B<-dcsc>: - -=over 4 - -=item B<-csci=n>, or B<--closing-side-comment-interval=n> - -where C<n> is the minimum number of lines that a block must have in -order for a closing side comment to be added. The default value is -C<n=6>. To illustrate: - - # perltidy -csci=2 -csc - sub message { - if ( !defined( $_[0] ) ) { - print("Hello, World\n"); - } ## end if ( !defined( $_[0] )) - else { - print( $_[0], "\n" ); - } ## end else [ if ( !defined( $_[0] )) - } ## end sub message - -Now the C<if> and C<else> blocks are commented. However, now this has -become very cluttered. - -=item B<-cscp=string>, or B<--closing-side-comment-prefix=string> - -where string is the prefix used before the name of the block type. The -default prefix, shown above, is C<## end>. This string will be added to -closing side comments, and it will also be used to recognize them in -order to update, delete, and format them. Any comment identified as a -closing side comment will be placed just a single space to the right of -its closing brace. - -=item B<-cscl=string>, or B<--closing-side-comment-list-string> - -where C<string> is a list of block types to be tagged with closing side -comments. By default, all code block types preceded by a keyword or -label (such as C<if>, C<sub>, and so on) will be tagged. The B<-cscl> -command changes the default list to be any selected block types; see -L<Specifying Block Types>. -For example, the following command -requests that only C<sub>'s, labels, C<BEGIN>, and C<END> blocks be -affected by any B<-csc> or B<-dcsc> operation: - - -cscl="sub : BEGIN END" - -=item B<-csct=n>, or B<--closing-side-comment-maximum-text=n> - -The text appended to certain block types, such as an C<if> block, is -whatever lies between the keyword introducing the block, such as C<if>, -and the opening brace. Since this might be too much text for a side -comment, there needs to be a limit, and that is the purpose of this -parameter. The default value is C<n=20>, meaning that no additional -tokens will be appended to this text after its length reaches 20 -characters. Omitted text is indicated with C<...>. (Tokens, including -sub names, are never truncated, however, so actual lengths may exceed -this). To illustrate, in the above example, the appended text of the -first block is C< ( !defined( $_[0] )...>. The existing limit of -C<n=20> caused this text to be truncated, as indicated by the C<...>. - -=item B<-csce=n>, or B<--closing-side-comment-else-flag=n> - -The default, B<n=0>, places the text of the opening C<if> statement after any -terminal C<else>. - -If B<n=2> is used, then each C<elsif> is also given the text of the opening -C<if> statement. Also, an C<else> will include the text of a preceding -C<elsif> statement. Note that this may result some long closing -side comments. - -If B<n=1> is used, the results will be the same as B<n=2> whenever the -resulting line length is less than the maximum allowed. - -=item B<-cscw>, or B<--closing-side-comment-warnings> - -This parameter is intended to help make the initial transition to the use of -closing side comments. -It causes two -things to happen if a closing side comment replaces an existing, different -closing side comment: first, an error message will be issued, and second, the -original side comment will be placed alone on a new specially marked comment -line for later attention. - -The intent is to avoid clobbering existing hand-written side comments -which happen to match the pattern of closing side comments. This flag -should only be needed on the first run with B<-csc>. - -=back - -B<Important Notes on Closing Side Comments:> - -=over 4 - -=item * - -Closing side comments are only placed on lines terminated with a closing -brace. Certain closing styles, such as the use of cuddled elses -(B<-ce>), preclude the generation of some closing side comments. - -=item * - -Please note that adding or deleting of closing side comments takes -place only through the commands B<-csc> or B<-dcsc>. The other commands, -if used, merely modify the behavior of these two commands. - -=item * - -It is recommended that the B<-cscw> flag be used along with B<-csc> on -the first use of perltidy on a given file. This will prevent loss of -any existing side comment data which happens to have the csc prefix. - -=item * - -Once you use B<-csc>, you should continue to use it so that any -closing side comments remain correct as code changes. Otherwise, these -comments will become incorrect as the code is updated. - -=item * - -If you edit the closing side comments generated by perltidy, you must also -change the prefix to be different from the closing side comment prefix. -Otherwise, your edits will be lost when you rerun perltidy with B<-csc>. For -example, you could simply change C<## end> to be C<## End>, since the test is -case sensitive. You may also want to use the B<-ssc> flag to keep these -modified closing side comments spaced the same as actual closing side comments. - -=item * - -Temporarily generating closing side comments is a useful technique for -exploring and/or debugging a perl script, especially one written by someone -else. You can always remove them with B<-dcsc>. - -=back - -=item Static Block Comments - -Static block comments are block comments with a special leading pattern, -C<##> by default, which will be treated slightly differently from other -block comments. They effectively behave as if they had glue along their -left and top edges, because they stick to the left edge and previous line -when there is no blank spaces in those places. This option is -particularly useful for controlling how commented code is displayed. - -=over 4 - -=item B<-sbc>, B<--static-block-comments> - -When B<-sbc> is used, a block comment with a special leading pattern, C<##> by -default, will be treated specially. - -Comments so identified are treated as follows: - -=over 4 - -=item * - -If there is no leading space on the line, then the comment will not -be indented, and otherwise it may be, - -=item * - -no new blank line will be -inserted before such a comment, and - -=item * - -such a comment will never become -a hanging side comment. - -=back - -For example, assuming C<@month_of_year> is -left-adjusted: - - @month_of_year = ( # -sbc (default) - 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', - ## 'Dec', 'Nov' - 'Nov', 'Dec'); - -Without this convention, the above code would become - - @month_of_year = ( # -nsbc - 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', - - ## 'Dec', 'Nov' - 'Nov', 'Dec' - ); - -which is not as clear. -The default is to use B<-sbc>. This may be deactivated with B<-nsbc>. - -=item B<-sbcp=string>, B<--static-block-comment-prefix=string> - -This parameter defines the prefix used to identify static block comments -when the B<-sbc> parameter is set. The default prefix is C<##>, -corresponding to C<-sbcp=##>. The prefix is actually part of a perl -pattern used to match lines and it must either begin with C<#> or C<^#>. -In the first case a prefix ^\s* will be added to match any leading -whitespace, while in the second case the pattern will match only -comments with no leading whitespace. For example, to -identify all comments as static block comments, one would use C<-sbcp=#>. -To identify all left-adjusted comments as static block comments, use C<-sbcp='^#'>. - -Please note that B<-sbcp> merely defines the pattern used to identify static -block comments; it will not be used unless the switch B<-sbc> is set. Also, -please be aware that since this string is used in a perl regular expression -which identifies these comments, it must enable a valid regular expression to -be formed. - -A pattern which can be useful is: - - -sbcp=^#{2,}[^\s#] - -This pattern requires a static block comment to have at least one character -which is neither a # nor a space. It allows a line containing only '#' -characters to be rejected as a static block comment. Such lines are often used -at the start and end of header information in subroutines and should not be -separated from the intervening comments, which typically begin with just a -single '#'. - -=item B<-osbc>, B<--outdent-static-block-comments> - -The command B<-osbc> will will cause static block comments to be outdented by 2 -spaces (or whatever B<-ci=n> has been set to), if possible. - -=back - -=item Static Side Comments - -Static side comments are side comments with a special leading pattern. -This option can be useful for controlling how commented code is displayed -when it is a side comment. - -=over 4 - -=item B<-ssc>, B<--static-side-comments> - -When B<-ssc> is used, a side comment with a static leading pattern, which is -C<##> by default, will be be spaced only a single space from previous -character, and it will not be vertically aligned with other side comments. - -The default is B<-nssc>. - -=item B<-sscp=string>, B<--static-side-comment-prefix=string> - -This parameter defines the prefix used to identify static side comments -when the B<-ssc> parameter is set. The default prefix is C<##>, -corresponding to C<-sscp=##>. - -Please note that B<-sscp> merely defines the pattern used to identify -static side comments; it will not be used unless the switch B<-ssc> is -set. Also, note that this string is used in a perl regular expression -which identifies these comments, so it must enable a valid regular -expression to be formed. - -=back - - -=back - -=head2 Skipping Selected Sections of Code - -Selected lines of code may be passed verbatim to the output without any -formatting. This feature is enabled by default but can be disabled with -the B<--noformat-skipping> or B<-nfs> flag. It should be used sparingly to -avoid littering code with markers, but it might be helpful for working -around occasional problems. For example it might be useful for keeping -the indentation of old commented code unchanged, keeping indentation of -long blocks of aligned comments unchanged, keeping certain list -formatting unchanged, or working around a glitch in perltidy. - -=over 4 - -=item B<-fs>, B<--format-skipping> - -This flag, which is enabled by default, causes any code between -special beginning and ending comment markers to be passed to the -output without formatting. The default beginning marker is #<<< -and the default ending marker is #>>> but they -may be changed (see next items below). Additional text may appear on -these special comment lines provided that it is separated from the -marker by at least one space. For example - - #<<< do not let perltidy touch this - my @list = (1, - 1, 1, - 1, 2, 1, - 1, 3, 3, 1, - 1, 4, 6, 4, 1,); - #>>> - -The comment markers may be placed at any location that a block comment may -appear. If they do not appear to be working, use the -log flag and examine the -F<.LOG> file. Use B<-nfs> to disable this feature. - -=item B<-fsb=string>, B<--format-skipping-begin=string> - -The B<-fsb=string> parameter may be used to change the beginning marker for -format skipping. The default is equivalent to -fsb='#<<<'. The string that -you enter must begin with a # and should be in quotes as necessary to get past -the command shell of your system. It is actually the leading text of a pattern -that is constructed by appending a '\s', so you must also include backslashes -for characters to be taken literally rather than as patterns. - -Some examples show how example strings become patterns: - - -fsb='#\{\{\{' becomes /^#\{\{\{\s/ which matches #{{{ but not #{{{{ - -fsb='#\*\*' becomes /^#\*\*\s/ which matches #** but not #*** - -fsb='#\*{2,}' becomes /^#\*{2,}\s/ which matches #** and #***** - -=item B<-fse=string>, B<--format-skipping-end=string> - -The B<-fsb=string> is the corresponding parameter used to change the -ending marker for format skipping. The default is equivalent to --fse='#<<<'. - -=back - -=head2 Line Break Control - -=over 4 - -=item B<-fnl>, B<--freeze-newlines> - -If you do not want any changes to the line breaks in your script, set -B<-fnl>, and they will remain fixed, and the rest of the commands in -this section and sections -L<Controlling List Formatting>, -L<Retaining or Ignoring Existing Line Breaks>, and -L<Blank Line Control> will be ignored. You may want to use B<-noll> -with this. - -=item B<-ce>, B<--cuddled-else> - -Enable the "cuddled else" style, in which C<else> and C<elsif> are -follow immediately after the curly brace closing the previous block. -The default is not to use cuddled elses, and is indicated with the flag -B<-nce> or B<--nocuddled-else>. Here is a comparison of the -alternatives: - - if ($task) { - yyy(); - } else { # -ce - zzz(); - } - - if ($task) { - yyy(); - } - else { # -nce (default) - zzz(); - } - -=item B<-bl>, B<--opening-brace-on-new-line> - -Use the flag B<-bl> to place the opening brace on a new line: - - if ( $input_file eq '-' ) # -bl - { - important_function(); - } - -This flag applies to all structural blocks, including sub's (unless -the B<-sbl> flag is set -- see next item). - -The default style, B<-nbl>, places an opening brace on the same line as -the keyword introducing it. For example, - - if ( $input_file eq '-' ) { # -nbl (default) - -=item B<-sbl>, B<--opening-sub-brace-on-new-line> - -The flag B<-sbl> can be used to override the value of B<-bl> for -opening sub braces. For example, - - perltidy -sbl - -produces this result: - - sub message - { - if (!defined($_[0])) { - print("Hello, World\n"); - } - else { - print($_[0], "\n"); - } - } - -This flag is negated with B<-nsbl>. If B<-sbl> is not specified, -the value of B<-bl> is used. - -=item B<-bli>, B<--brace-left-and-indent> - -The flag B<-bli> is the same as B<-bl> but in addition it causes one -unit of continuation indentation ( see B<-ci> ) to be placed before -an opening and closing block braces. - -For example, - - if ( $input_file eq '-' ) # -bli - { - important_function(); - } - -By default, this extra indentation occurs for blocks of type: -B<if>, B<elsif>, B<else>, B<unless>, B<for>, B<foreach>, B<sub>, -B<while>, B<until>, and also with a preceding label. The next item -shows how to change this. - -=item B<-blil=s>, B<--brace-left-and-indent-list=s> - -Use this parameter to change the types of block braces for which the -B<-bli> flag applies; see L<Specifying Block Types>. For example, -B<-blil='if elsif else'> would apply it to only C<if/elsif/else> blocks. - -=item B<-bar>, B<--opening-brace-always-on-right> - -The default style, B<-nbl> places the opening code block brace on a new -line if it does not fit on the same line as the opening keyword, like -this: - - if ( $bigwasteofspace1 && $bigwasteofspace2 - || $bigwasteofspace3 && $bigwasteofspace4 ) - { - big_waste_of_time(); - } - -To force the opening brace to always be on the right, use the B<-bar> -flag. In this case, the above example becomes - - if ( $bigwasteofspace1 && $bigwasteofspace2 - || $bigwasteofspace3 && $bigwasteofspace4 ) { - big_waste_of_time(); - } - -A conflict occurs if both B<-bl> and B<-bar> are specified. - -=item B<-otr>, B<--opening-token-right> and related flags - -The B<-otr> flag is a hint that perltidy should not place a break between a -comma and an opening token. For example: - - # default formatting - push @{ $self->{$module}{$key} }, - { - accno => $ref->{accno}, - description => $ref->{description} - }; - - # perltidy -otr - push @{ $self->{$module}{$key} }, { - accno => $ref->{accno}, - description => $ref->{description} - }; - -The flag B<-otr> is actually a synonym for three other flags -which can be used to control parens, hash braces, and square brackets -separately if desired: - - -opr or --opening-paren-right - -ohbr or --opening-hash-brace-right - -osbr or --opening-square-bracket-right - -=item Vertical tightness of non-block curly braces, parentheses, and square brackets. - -These parameters control what shall be called vertical tightness. Here are the -main points: - -=over 4 - -=item * - -Opening tokens (except for block braces) are controlled by B<-vt=n>, or -B<--vertical-tightness=n>, where - - -vt=0 always break a line after opening token (default). - -vt=1 do not break unless this would produce more than one - step in indentation in a line. - -vt=2 never break a line after opening token - -=item * - -You must also use the B<-lp> flag when you use the B<-vt> flag; the -reason is explained below. - -=item * - -Closing tokens (except for block braces) are controlled by B<-vtc=n>, or -B<--vertical-tightness-closing=n>, where - - -vtc=0 always break a line before a closing token (default), - -vtc=1 do not break before a closing token which is followed - by a semicolon or another closing token, and is not in - a list environment. - -vtc=2 never break before a closing token. - -The rules for B<-vtc=1> are designed to maintain a reasonable balance -between tightness and readability in complex lists. - -=item * - -Different controls may be applied to to different token types, -and it is also possible to control block braces; see below. - -=item * - -Finally, please note that these vertical tightness flags are merely -hints to the formatter, and it cannot always follow them. Things which -make it difficult or impossible include comments, blank lines, blocks of -code within a list, and possibly the lack of the B<-lp> parameter. -Also, these flags may be ignored for very small lists (2 or 3 lines in -length). - -=back - -Here are some examples: - - # perltidy -lp -vt=0 -vtc=0 - %romanNumerals = ( - one => 'I', - two => 'II', - three => 'III', - four => 'IV', - ); - - # perltidy -lp -vt=1 -vtc=0 - %romanNumerals = ( one => 'I', - two => 'II', - three => 'III', - four => 'IV', - ); - - # perltidy -lp -vt=1 -vtc=1 - %romanNumerals = ( one => 'I', - two => 'II', - three => 'III', - four => 'IV', ); - -The difference between B<-vt=1> and B<-vt=2> is shown here: - - # perltidy -lp -vt=1 - $init->add( - mysprintf( "(void)find_threadsv(%s);", - cstring( $threadsv_names[ $op->targ ] ) - ) - ); - - # perltidy -lp -vt=2 - $init->add( mysprintf( "(void)find_threadsv(%s);", - cstring( $threadsv_names[ $op->targ ] ) - ) - ); - -With B<-vt=1>, the line ending in C<add(> does not combine with the next -line because the next line is not balanced. This can help with -readability, but B<-vt=2> can be used to ignore this rule. - -The tightest, and least readable, code is produced with both C<-vt=2> and -C<-vtc=2>: - - # perltidy -lp -vt=2 -vtc=2 - $init->add( mysprintf( "(void)find_threadsv(%s);", - cstring( $threadsv_names[ $op->targ ] ) ) ); - -Notice how the code in all of these examples collapses vertically as -B<-vt> increases, but the indentation remains unchanged. This is -because perltidy implements the B<-vt> parameter by first formatting as -if B<-vt=0>, and then simply overwriting one output line on top of the -next, if possible, to achieve the desired vertical tightness. The -B<-lp> indentation style has been designed to allow this vertical -collapse to occur, which is why it is required for the B<-vt> parameter. - -The B<-vt=n> and B<-vtc=n> parameters apply to each type of container -token. If desired, vertical tightness controls can be applied -independently to each of the closing container token types. - -The parameters for controlling parentheses are B<-pvt=n> or -B<--paren-vertical-tightness=n>, and B<-pcvt=n> or -B<--paren-vertical-tightness-closing=n>. - -Likewise, the parameters for square brackets are B<-sbvt=n> or -B<--square-bracket-vertical-tightness=n>, and B<-sbcvt=n> or -B<--square-bracket-vertical-tightness-closing=n>. - -Finally, the parameters for controlling non-code block braces are -B<-bvt=n> or B<--brace-vertical-tightness=n>, and B<-bcvt=n> or -B<--brace-vertical-tightness-closing=n>. - -In fact, the parameter B<-vt=n> is actually just an abbreviation for -B<-pvt=n -bvt=n sbvt=n>, and likewise B<-vtc=n> is an abbreviation -for B<-pvtc=n -bvtc=n sbvtc=n>. - -=item B<-bbvt=n> or B<--block-brace-vertical-tightness=n> - -The B<-bbvt=n> flag is just like the B<-vt=n> flag but applies -to opening code block braces. - - -bbvt=0 break after opening block brace (default). - -bbvt=1 do not break unless this would produce more than one - step in indentation in a line. - -bbvt=2 do not break after opening block brace. - -It is necessary to also use either B<-bl> or B<-bli> for this to work, -because, as with other vertical tightness controls, it is implemented by -simply overwriting a line ending with an opening block brace with the -subsequent line. For example: - - # perltidy -bli -bbvt=0 - if ( open( FILE, "< $File" ) ) - { - while ( $File = <FILE> ) - { - $In .= $File; - $count++; - } - close(FILE); - } - - # perltidy -bli -bbvt=1 - if ( open( FILE, "< $File" ) ) - { while ( $File = <FILE> ) - { $In .= $File; - $count++; - } - close(FILE); - } - -By default this applies to blocks associated with keywords B<if>, -B<elsif>, B<else>, B<unless>, B<for>, B<foreach>, B<sub>, B<while>, -B<until>, and also with a preceding label. This can be changed with -the parameter B<-bbvtl=string>, or -B<--block-brace-vertical-tightness-list=string>, where B<string> is a -space-separated list of block types. For more information on the -possible values of this string, see L<Specifying Block Types> - -For example, if we want to just apply this style to C<if>, -C<elsif>, and C<else> blocks, we could use -C<perltidy -bli -bbvt=1 -bbvtl='if elsif else'>. - -There is no vertical tightness control for closing block braces; with -the exception of one-line blocks, they will normally remain on a -separate line. - -=item B<-sot>, B<--stack-opening-tokens> and related flags - -The B<-sot> flag tells perltidy to "stack" opening tokens -when possible to avoid lines with isolated opening tokens. - -For example: - - # default - $opt_c = Text::CSV_XS->new( - { - binary => 1, - sep_char => $opt_c, - always_quote => 1, - } - ); - - # -sot - $opt_c = Text::CSV_XS->new( { - binary => 1, - sep_char => $opt_c, - always_quote => 1, - } - ); - -For detailed control of individual closing tokens the following -controls can be used: - - -sop or --stack-opening-paren - -sohb or --stack-opening-hash-brace - -sosb or --stack-opening-square-bracket - -The flag B<-sot> is a synonym for B<-sop -sohb -sosb>. - -=item B<-sct>, B<--stack-closing-tokens> and related flags - -The B<-sct> flag tells perltidy to "stack" closing tokens -when possible to avoid lines with isolated closing tokens. - -For example: - - # default - $opt_c = Text::CSV_XS->new( - { - binary => 1, - sep_char => $opt_c, - always_quote => 1, - } - ); - - # -sct - $opt_c = Text::CSV_XS->new( - { - binary => 1, - sep_char => $opt_c, - always_quote => 1, - } ); - -The B<-sct> flag is somewhat similar to the B<-vtc> flags, and in some -cases it can give a similar result. The difference is that the B<-vtc> -flags try to avoid lines with leading opening tokens by "hiding" them at -the end of a previous line, whereas the B<-sct> flag merely tries to -reduce the number of lines with isolated closing tokens by stacking them -but does not try to hide them. For example: - - # -vtc=2 - $opt_c = Text::CSV_XS->new( - { - binary => 1, - sep_char => $opt_c, - always_quote => 1, } ); - -For detailed control of the stacking of individual closing tokens the -following controls can be used: - - -scp or --stack-closing-paren - -schb or --stack-closing-hash-brace - -scsb or --stack-closing-square-bracket - -The flag B<-sct> is a synonym for B<-scp -schb -scsb>. - -=item B<-dnl>, B<--delete-old-newlines> - -By default, perltidy first deletes all old line break locations, and then it -looks for good break points to match the desired line length. Use B<-ndnl> -or B<--nodelete-old-newlines> to force perltidy to retain all old line break -points. - -=item B<-anl>, B<--add-newlines> - -By default, perltidy will add line breaks when necessary to create -continuations of long lines and to improve the script appearance. Use -B<-nanl> or B<--noadd-newlines> to prevent any new line breaks. - -This flag does not prevent perltidy from eliminating existing line -breaks; see B<--freeze-newlines> to completely prevent changes to line -break points. - -=item Controlling whether perltidy breaks before or after operators - -Four command line parameters provide some control over whether -a line break should be before or after specific token types. -Two parameters give detailed control: - -B<-wba=s> or B<--want-break-after=s>, and - -B<-wbb=s> or B<--want-break-before=s>. - -These parameters are each followed by a quoted string, B<s>, containing -a list of token types (separated only by spaces). No more than one of each -of these parameters should be specified, because repeating a -command-line parameter always overwrites the previous one before -perltidy ever sees it. - -By default, perltidy breaks B<after> these token types: - % + - * / x != == >= <= =~ !~ < > | & - = **= += *= &= <<= &&= -= /= |= >>= ||= //= .= %= ^= x= - -And perltidy breaks B<before> these token types by default: - . << >> -> && || // - -To illustrate, to cause a break after a concatenation operator, C<'.'>, -rather than before it, the command line would be - - -wba="." - -As another example, the following command would cause a break before -math operators C<'+'>, C<'-'>, C<'/'>, and C<'*'>: - - -wbb="+ - / *" - -These commands should work well for most of the token types that perltidy uses -(use B<--dump-token-types> for a list). Also try the B<-D> flag on a short -snippet of code and look at the .DEBUG file to see the tokenization. However, -for a few token types there may be conflicts with hardwired logic which cause -unexpected results. One example is curly braces, which should be controlled -with the parameter B<bl> provided for that purpose. - -B<WARNING> Be sure to put these tokens in quotes to avoid having them -misinterpreted by your command shell. - -Two additional parameters are available which, though they provide no further -capability, can simplify input are: - -B<-baao> or B<--break-after-all-operators>, - -B<-bbao> or B<--break-before-all-operators>. - -The -baao sets the default to be to break after all of the following operators: - - % + - * / x != == >= <= =~ !~ < > | & - = **= += *= &= <<= &&= -= /= |= >>= ||= //= .= %= ^= x= - . : ? && || and or err xor - -and the B<-bbao> flag sets the default to break before all of these operators. -These can be used to define an initial break preference which can be fine-tuned -with the B<-wba> and B<-wbb> flags. For example, to break before all operators -except an B<=> one could use --bbao -wba='=' rather than listing every -single perl operator except B<=> on a -wbb flag. - -=back - -=head2 Controlling List Formatting - -Perltidy attempts to place comma-separated arrays of values in tables -which look good. Its default algorithms usually work well, and they -have been improving with each release, but several parameters are -available to control list formatting. - -=over 4 - -=item B<-boc>, B<--break-at-old-comma-breakpoints> - -This flag tells perltidy to try to break at all old commas. This is not -the default. Normally, perltidy makes a best guess at list formatting, -and seldom uses old comma breakpoints. Usually this works well, -but consider: - - my @list = (1, - 1, 1, - 1, 2, 1, - 1, 3, 3, 1, - 1, 4, 6, 4, 1,); - -The default formatting will flatten this down to one line: - - # perltidy (default) - my @list = ( 1, 1, 1, 1, 2, 1, 1, 3, 3, 1, 1, 4, 6, 4, 1, ); - -which hides the structure. Using B<-boc>, plus additional flags -to retain the original style, yields - - # perltidy -boc -lp -pt=2 -vt=1 -vtc=1 - my @list = (1, - 1, 1, - 1, 2, 1, - 1, 3, 3, 1, - 1, 4, 6, 4, 1,); - -A disadvantage of this flag is that all tables in the file -must already be nicely formatted. For another possibility see -the -fs flag in L<Skipping Selected Sections of Code>. - -=item B<-mft=n>, B<--maximum-fields-per-table=n> - -If the computed number of fields for any table exceeds B<n>, then it -will be reduced to B<n>. The default value for B<n> is a large number, -40. While this value should probably be left unchanged as a general -rule, it might be used on a small section of code to force a list to -have a particular number of fields per line, and then either the B<-boc> -flag could be used to retain this formatting, or a single comment could -be introduced somewhere to freeze the formatting in future applications -of perltidy. - - # perltidy -mft=2 - @month_of_year = ( - 'Jan', 'Feb', - 'Mar', 'Apr', - 'May', 'Jun', - 'Jul', 'Aug', - 'Sep', 'Oct', - 'Nov', 'Dec' - ); - -=item B<-cab=n>, B<--comma-arrow-breakpoints=n> - -A comma which follows a comma arrow, '=>', requires special -consideration. In a long list, it is common to break at all such -commas. This parameter can be used to control how perltidy breaks at -these commas. (However, it will have no effect if old comma breaks are -being forced because B<-boc> is used). The possible values of B<n> are: - - n=0 break at all commas after => - n=1 stable: break at all commas after => unless this would break - an existing one-line container (default) - 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 - -For example, given the following single line, perltidy by default will -not add any line breaks because it would break the existing one-line -container: - - bless { B => $B, Root => $Root } => $package; - -Using B<-cab=0> will force a break after each comma-arrow item: - - # perltidy -cab=0: - bless { - B => $B, - Root => $Root - } => $package; - -If perltidy is subsequently run with this container broken, then by -default it will break after each '=>' because the container is now -broken. To reform a one-line container, the parameter B<-cab=2> would -be needed. - -The flag B<-cab=3> can be used to prevent these commas from being -treated specially. In this case, an item such as "01" => 31 is -treated as a single item in a table. The number of fields in this table -will be determined by the same rules that are used for any other table. -Here is an example. - - # perltidy -cab=3 - my %last_day = ( - "01" => 31, "02" => 29, "03" => 31, "04" => 30, - "05" => 31, "06" => 30, "07" => 31, "08" => 31, - "09" => 30, "10" => 31, "11" => 30, "12" => 31 - ); - -=back - -=head2 Retaining or Ignoring Existing Line Breaks - -Several additional parameters are available for controlling the extent -to which line breaks in the input script influence the output script. -In most cases, the default parameter values are set so that, if a choice -is possible, the output style follows the input style. For example, if -a short logical container is broken in the input script, then the -default behavior is for it to remain broken in the output script. - -Most of the parameters in this section would only be required for a -one-time conversion of a script from short container lengths to longer -container lengths. The opposite effect, of converting long container -lengths to shorter lengths, can be obtained by temporarily using a short -maximum line length. - -=over 4 - -=item B<-bol>, B<--break-at-old-logical-breakpoints> - -By default, if a logical expression is broken at a C<&&>, C<||>, C<and>, -or C<or>, then the container will remain broken. Also, breaks -at internal keywords C<if> and C<unless> will normally be retained. -To prevent this, and thus form longer lines, use B<-nbol>. - -=item B<-bok>, B<--break-at-old-keyword-breakpoints> - -By default, perltidy will retain a breakpoint before keywords which may -return lists, such as C<sort> and <map>. This allows chains of these -operators to be displayed one per line. Use B<-nbok> to prevent -retaining these breakpoints. - -=item B<-bot>, B<--break-at-old-ternary-breakpoints> - -By default, if a conditional (ternary) operator is broken at a C<:>, -then it will remain broken. To prevent this, and thereby -form longer lines, use B<-nbot>. - -=item B<-iob>, B<--ignore-old-breakpoints> - -Use this flag to tell perltidy to ignore existing line breaks to the -maximum extent possible. This will tend to produce the longest possible -containers, regardless of type, which do not exceed the line length -limit. - -=item B<-kis>, B<--keep-interior-semicolons> - -Use the B<-kis> flag to prevent breaking at a semicolon if -there was no break there in the input file. Normally -perltidy places a newline after each semicolon which -terminates a statement unless several statements are -contained within a one-line brace block. To illustrate, -consider the following input lines: - - dbmclose(%verb_delim); undef %verb_delim; - dbmclose(%expanded); undef %expanded; - -The default is to break after each statement, giving - - dbmclose(%verb_delim); - undef %verb_delim; - dbmclose(%expanded); - undef %expanded; - -With B<perltidy -kis> the multiple statements are retained: - - dbmclose(%verb_delim); undef %verb_delim; - dbmclose(%expanded); undef %expanded; - -The statements are still subject to the specified value -of B<maximum-line-length> and will be broken if this -maximum is exceeed. - -=back - -=head2 Blank Line Control - -Blank lines can improve the readability of a script if they are carefully -placed. Perltidy has several commands for controlling the insertion, -retention, and removal of blank lines. - -=over 4 - -=item B<-bbc>, B<--blanks-before-comments> - -A blank line will be introduced before a full-line comment. This is the -default. Use B<-nbbc> or B<--noblanks-before-comments> to prevent -such blank lines from being introduced. - -=item B<-bbs>, B<--blanks-before-subs> - -A blank line will be introduced before a B<sub> definition, unless it is a -one-liner or preceded by a comment. A blank line will also be introduced -before a B<package> statement and a B<BEGIN> and B<END> block. This is the -default. The intention is to help display the structure of a program by -setting off certain key sections of code. This is negated with B<-nbbs> or -B<--noblanks-before-subs>. - -=item B<-bbb>, B<--blanks-before-blocks> - -A blank line will be introduced before blocks of coding delimited by -B<for>, B<foreach>, B<while>, B<until>, and B<if>, B<unless>, in the following -circumstances: - -=over 4 - -=item * - -The block is not preceded by a comment. - -=item * - -The block is not a one-line block. - -=item * - -The number of consecutive non-blank lines at the current indentation depth is at least B<-lbl> -(see next section). - -=back - -This is the default. The intention of this option is to introduce -some space within dense coding. -This is negated with B<-nbbb> or B<--noblanks-before-blocks>. - -=item B<-lbl=n> B<--long-block-line-count=n> - -This controls how often perltidy is allowed to add blank lines before -certain block types (see previous section). The default is 8. Entering -a value of B<0> is equivalent to entering a very large number. - -=item B<-mbl=n> B<--maximum-consecutive-blank-lines=n> - -This parameter specifies the maximum number of consecutive blank lines -in the output script. The default is n=1. If the input file has more -than n consecutive blank lines, the number will be reduced to n. -(This obviously does not apply to pod sections, here-documents, and quotes). - -=item B<-sob>, B<--swallow-optional-blank-lines> - -All blank lines not required by the above flags, B<-bbb>, B<-bbs>, and B<-bbc>, -will be deleted. (But essential blank lines above pod documents will be -retained). This is NOT the default. - -=item B<-nsob>, B<--noswallow-optional-blank-lines> - -Retain blank lines, including those which do not corresponding to flags -B<-bbb>, B<-bbs>, and B<-bbc>. This is the default. The number of -blanks retained is subject to the limit imposed by -B<--maximum-consecutive-blank-lines>, however. - -=back - -=head2 Styles - -A style refers to a convenient collection of existing parameters. - -=over 4 - -=item B<-gnu>, B<--gnu-style> - -B<-gnu> gives an approximation to the GNU Coding Standards (which do -not apply to perl) as they are sometimes implemented. At present, this -style overrides the default style with the following parameters: - - -lp -bl -noll -pt=2 -bt=2 -sbt=2 -icp - -=item B<-pbp>, B<--perl-best-practices> - -B<-pbp> is an abbreviation for the parameters in the book B<Perl Best Practices> -by Damian Conway: - - -l=78 -i=4 -ci=4 -st -se -vt=2 -cti=0 -pt=1 -bt=1 -sbt=1 -bbt=1 -nsfs -nolq - -wbb="% + - * / x != == >= <= =~ !~ < > | & = - **= += *= &= <<= &&= -= /= |= >>= ||= //= .= %= ^= x=" - -Note that the -st and -se flags make perltidy act as a filter on one file only. -These can be overridden with -nst and -nse if necessary. - -=back - -=head2 Other Controls - -=over 4 - -=item Deleting selected text - -Perltidy can selectively delete comments and/or pod documentation. The -command B<-dac> or B<--delete-all-comments> will delete all comments -B<and> all pod documentation, leaving just code and any leading system -control lines. - -The command B<-dp> or B<--delete-pod> will remove all pod documentation -(but not comments). - -Two commands which remove comments (but not pod) are: B<-dbc> or -B<--delete-block-comments> and B<-dsc> or B<--delete-side-comments>. -(Hanging side comments will be deleted with block comments here.) - -The negatives of these commands also work, and are the defaults. When -block comments are deleted, any leading 'hash-bang' will be retained. -Also, if the B<-x> flag is used, any system commands before a leading -hash-bang will be retained (even if they are in the form of comments). - -=item Writing selected text to a file - -When perltidy writes a formatted text file, it has the ability to also -send selected text to a file with a F<.TEE> extension. This text can -include comments and pod documentation. - -The command B<-tac> or B<--tee-all-comments> will write all comments -B<and> all pod documentation. - -The command B<-tp> or B<--tee-pod> will write all pod documentation (but -not comments). - -The commands which write comments (but not pod) are: B<-tbc> or -B<--tee-block-comments> and B<-tsc> or B<--tee-side-comments>. -(Hanging side comments will be written with block comments here.) - -The negatives of these commands also work, and are the defaults. - -=item Using a F<.perltidyrc> command file - -If you use perltidy frequently, you probably won't be happy until you -create a F<.perltidyrc> file to avoid typing commonly-used parameters. -Perltidy will first look in your current directory for a command file -named F<.perltidyrc>. If it does not find one, it will continue looking -for one in other standard locations. - -These other locations are system-dependent, and may be displayed with -the command C<perltidy -dpro>. Under Unix systems, it will first look -for an environment variable B<PERLTIDY>. Then it will look for a -F<.perltidyrc> file in the home directory, and then for a system-wide -file F</usr/local/etc/perltidyrc>, and then it will look for -F</etc/perltidyrc>. Note that these last two system-wide files do not -have a leading dot. Further system-dependent information will be found -in the INSTALL file distributed with perltidy. - -This file is free format, and simply a list of parameters, just as they -would be entered on a command line. Any number of lines may be used, -with any number of parameters per line, although it may be easiest to -read with one parameter per line. Blank lines are ignored, and text -after a '#' is ignored to the end of a line. - -Here is an example of a F<.perltidyrc> file: - - # This is a simple of a .perltidyrc configuration file - # This implements a highly spaced style - -se # errors to standard error output - -w # show all warnings - -bl # braces on new lines - -pt=0 # parens not tight at all - -bt=0 # braces not tight - -sbt=0 # square brackets not tight - -The parameters in the F<.perltidyrc> file are installed first, so any -parameters given on the command line will have priority over them. - -To avoid confusion, perltidy ignores any command in the .perltidyrc -file which would cause some kind of dump and an exit. These are: - - -h -v -ddf -dln -dop -dsn -dtt -dwls -dwrs -ss - -There are several options may be helpful in debugging a F<.perltidyrc> -file: - -=over 4 - -=item * - -A very helpful command is B<--dump-profile> or B<-dpro>. It writes a -list of all configuration filenames tested to standard output, and -if a file is found, it dumps the content to standard output before -exiting. So, to find out where perltidy looks for its configuration -files, and which one if any it selects, just enter - - perltidy -dpro - -=item * - -It may be simplest to develop and test configuration files with -alternative names, and invoke them with B<-pro=filename> on the command -line. Then rename the desired file to F<.perltidyrc> when finished. - -=item * - -The parameters in the F<.perltidyrc> file can be switched off with -the B<-npro> option. - -=item * - -The commands B<--dump-options>, B<--dump-defaults>, B<--dump-long-names>, -and B<--dump-short-names>, all described below, may all be helpful. - -=back - -=item Creating a new abbreviation - -A special notation is available for use in a F<.perltidyrc> file -for creating an abbreviation for a group -of options. This can be used to create a -shorthand for one or more styles which are frequently, but not always, -used. The notation is to group the options within curly braces which -are preceded by the name of the alias (without leading dashes), like this: - - newword { - -opt1 - -opt2 - } - -where B<newword> is the abbreviation, and B<opt1>, etc, are existing parameters -I<or other abbreviations>. The main syntax requirement is that -the new abbreviation must begin on a new line. -Space before and after the curly braces is optional. -For a -specific example, the following line - - airy {-bl -pt=0 -bt=0 -sbt=0} - -could be placed in a F<.perltidyrc> file, and then invoked at will with - - perltidy -airy somefile.pl - -(Either C<-airy> or C<--airy> may be used). - -=item Skipping leading non-perl commands with B<-x> or B<--look-for-hash-bang> - -If your script has leading lines of system commands or other text which -are not valid perl code, and which are separated from the start of the -perl code by a "hash-bang" line, ( a line of the form C<#!...perl> ), -you must use the B<-x> flag to tell perltidy not to parse and format any -lines before the "hash-bang" line. This option also invokes perl with a --x flag when checking the syntax. This option was originally added to -allow perltidy to parse interactive VMS scripts, but it should be used -for any script which is normally invoked with C<perl -x>. - -=item Making a file unreadable - -The goal of perltidy is to improve the readability of files, but there -are two commands which have the opposite effect, B<--mangle> and -B<--extrude>. They are actually -merely aliases for combinations of other parameters. Both of these -strip all possible whitespace, but leave comments and pod documents, -so that they are essentially reversible. The -difference between these is that B<--mangle> puts the fewest possible -line breaks in a script while B<--extrude> puts the maximum possible. -Note that these options do not provided any meaningful obfuscation, because -perltidy can be used to reformat the files. They were originally -developed to help test the tokenization logic of perltidy, but they -have other uses. -One use for B<--mangle> is the following: - - perltidy --mangle myfile.pl -st | perltidy -o myfile.pl.new - -This will form the maximum possible number of one-line blocks (see next -section), and can sometimes help clean up a badly formatted script. - -A similar technique can be used with B<--extrude> instead of B<--mangle> -to make the minimum number of one-line blocks. - -Another use for B<--mangle> is to combine it with B<-dac> to reduce -the file size of a perl script. - -=item One-line blocks - -There are a few points to note regarding one-line blocks. A one-line -block is something like this, - - if ($x > 0) { $y = 1 / $x } - -where the contents within the curly braces is short enough to fit -on a single line. - -With few exceptions, perltidy retains existing one-line blocks, if it -is possible within the line-length constraint, but it does not attempt -to form new ones. In other words, perltidy will try to follow the -one-line block style of the input file. - -If an existing one-line block is longer than the maximum line length, -however, it will be broken into multiple lines. When this happens, perltidy -checks for and adds any optional terminating semicolon (unless the B<-nasc> -option is used) if the block is a code block. - -The main exception is that perltidy will attempt to form new one-line -blocks following the keywords C<map>, C<eval>, and C<sort>, because -these code blocks are often small and most clearly displayed in a single -line. - -One-line block rules can conflict with the cuddled-else option. When -the cuddled-else option is used, perltidy retains existing one-line -blocks, even if they do not obey cuddled-else formatting. - -Occasionally, when one-line blocks get broken because they exceed the -available line length, the formatting will violate the requested brace style. -If this happens, reformatting the script a second time should correct -the problem. - -=item Debugging - -The following flags are available for debugging: - -B<--dump-defaults> or B<-ddf> will write the default option set to standard output and quit - -B<--dump-profile> or B<-dpro> will write the name of the current -configuration file and its contents to standard output and quit. - -B<--dump-options> or B<-dop> will write current option set to standard -output and quit. - -B<--dump-long-names> or B<-dln> will write all command line long names (passed -to Get_options) to standard output and quit. - -B<--dump-short-names> or B<-dsn> will write all command line short names -to standard output and quit. - -B<--dump-token-types> or B<-dtt> will write a list of all token types -to standard output and quit. - -B<--dump-want-left-space> or B<-dwls> will write the hash %want_left_space -to standard output and quit. See the section on controlling whitespace -around tokens. - -B<--dump-want-right-space> or B<-dwrs> will write the hash %want_right_space -to standard output and quit. See the section on controlling whitespace -around tokens. - -B<-DEBUG> will write a file with extension F<.DEBUG> for each input file -showing the tokenization of all lines of code. - -=item Working with MakeMaker, AutoLoader and SelfLoader - -The first $VERSION line of a file which might be eval'd by MakeMaker -is passed through unchanged except for indentation. -Use B<--nopass-version-line>, or B<-npvl>, to deactivate this feature. - -If the AutoLoader module is used, perltidy will continue formatting -code after seeing an __END__ line. -Use B<--nolook-for-autoloader>, or B<-nlal>, to deactivate this feature. - -Likewise, if the SelfLoader module is used, perltidy will continue formatting -code after seeing a __DATA__ line. -Use B<--nolook-for-selfloader>, or B<-nlsl>, to deactivate this feature. - -=item Working around problems with older version of Perl - -Perltidy contains a number of rules which help avoid known subtleties -and problems with older versions of perl, and these rules always -take priority over whatever formatting flags have been set. For example, -perltidy will usually avoid starting a new line with a bareword, because -this might cause problems if C<use strict> is active. - -There is no way to override these rules. - -=back - -=head1 HTML OPTIONS - -=over 4 - -=item The B<-html> master switch - -The flag B<-html> causes perltidy to write an html file with extension -F<.html>. So, for example, the following command - - perltidy -html somefile.pl - -will produce a syntax-colored html file named F<somefile.pl.html> -which may be viewed with a browser. - -B<Please Note>: In this case, perltidy does not do any formatting to the -input file, and it does not write a formatted file with extension -F<.tdy>. This means that two perltidy runs are required to create a -fully reformatted, html copy of a script. - -=item The B<-pre> flag for code snippets - -When the B<-pre> flag is given, only the pre-formatted section, within -the <PRE> and </PRE> tags, will be output. This simplifies inclusion -of the output in other files. The default is to output a complete -web page. - -=item The B<-nnn> flag for line numbering - -When the B<-nnn> flag is given, the output lines will be numbered. - -=item The B<-toc>, or B<--html-table-of-contents> flag - -By default, a table of contents to packages and subroutines will be -written at the start of html output. Use B<-ntoc> to prevent this. -This might be useful, for example, for a pod document which contains a -number of unrelated code snippets. This flag only influences the code -table of contents; it has no effect on any table of contents produced by -pod2html (see next item). - -=item The B<-pod>, or B<--pod2html> flag - -There are two options for formatting pod documentation. The default is -to pass the pod through the Pod::Html module (which forms the basis of -the pod2html utility). Any code sections are formatted by perltidy, and -the results then merged. Note: perltidy creates a temporary file when -Pod::Html is used; see L<"FILES">. Also, Pod::Html creates temporary -files for its cache. - -NOTE: Perltidy counts the number of C<=cut> lines, and either moves the -pod text to the top of the html file if there is one C<=cut>, or leaves -the pod text in its original order (interleaved with code) otherwise. - -Most of the flags accepted by pod2html may be included in the perltidy -command line, and they will be passed to pod2html. In some cases, -the flags have a prefix C<pod> to emphasize that they are for the -pod2html, and this prefix will be removed before they are passed to -pod2html. The flags which have the additional C<pod> prefix are: - - --[no]podheader --[no]podindex --[no]podrecurse --[no]podquiet - --[no]podverbose --podflush - -The flags which are unchanged from their use in pod2html are: - - --backlink=s --cachedir=s --htmlroot=s --libpods=s --title=s - --podpath=s --podroot=s - -where 's' is an appropriate character string. Not all of these flags are -available in older versions of Pod::Html. See your Pod::Html documentation for -more information. - -The alternative, indicated with B<-npod>, is not to use Pod::Html, but -rather to format pod text in italics (or whatever the stylesheet -indicates), without special html markup. This is useful, for example, -if pod is being used as an alternative way to write comments. - -=item The B<-frm>, or B<--frames> flag - -By default, a single html output file is produced. This can be changed -with the B<-frm> option, which creates a frame holding a table of -contents in the left panel and the source code in the right side. This -simplifies code browsing. Assume, for example, that the input file is -F<MyModule.pm>. Then, for default file extension choices, these three -files will be created: - - MyModule.pm.html - the frame - MyModule.pm.toc.html - the table of contents - MyModule.pm.src.html - the formatted source code - -Obviously this file naming scheme requires that output be directed to a real -file (as opposed to, say, standard output). If this is not the -case, or if the file extension is unknown, the B<-frm> option will be -ignored. - -=item The B<-text=s>, or B<--html-toc-extension> flag - -Use this flag to specify the extra file extension of the table of contents file -when html frames are used. The default is "toc". -See L<Specifying File Extensions>. - -=item The B<-sext=s>, or B<--html-src-extension> flag - -Use this flag to specify the extra file extension of the content file when html -frames are used. The default is "src". -See L<Specifying File Extensions>. - -=item The B<-hent>, or B<--html-entities> flag - -This flag controls the use of Html::Entities for html formatting. By -default, the module Html::Entities is used to encode special symbols. -This may not be the right thing for some browser/language -combinations. Use --nohtml-entities or -nhent to prevent this. - -=item Style Sheets - -Style sheets make it very convenient to control and adjust the -appearance of html pages. The default behavior is to write a page of -html with an embedded style sheet. - -An alternative to an embedded style sheet is to create a page with a -link to an external style sheet. This is indicated with the -B<-css=filename>, where the external style sheet is F<filename>. The -external style sheet F<filename> will be created if and only if it does -not exist. This option is useful for controlling multiple pages from a -single style sheet. - -To cause perltidy to write a style sheet to standard output and exit, -use the B<-ss>, or B<--stylesheet>, flag. This is useful if the style -sheet could not be written for some reason, such as if the B<-pre> flag -was used. Thus, for example, - - perltidy -html -ss >mystyle.css - -will write a style sheet with the default properties to file -F<mystyle.css>. - -The use of style sheets is encouraged, but a web page without a style -sheets can be created with the flag B<-nss>. Use this option if you -must to be sure that older browsers (roughly speaking, versions prior to -4.0 of Netscape Navigator and Internet Explorer) can display the -syntax-coloring of the html files. - -=item Controlling HTML properties - -Note: It is usually more convenient to accept the default properties -and then edit the stylesheet which is produced. However, this section -shows how to control the properties with flags to perltidy. - -Syntax colors may be changed from their default values by flags of the either -the long form, B<-html-color-xxxxxx=n>, or more conveniently the short form, -B<-hcx=n>, where B<xxxxxx> is one of the following words, and B<x> is the -corresponding abbreviation: - - Token Type xxxxxx x - ---------- -------- -- - comment comment c - number numeric n - identifier identifier i - bareword, function bareword w - keyword keyword k - quite, pattern quote q - here doc text here-doc-text h - here doc target here-doc-target hh - punctuation punctuation pu - parentheses paren p - structural braces structure s - semicolon semicolon sc - colon colon co - comma comma cm - label label j - sub definition name subroutine m - pod text pod-text pd - -A default set of colors has been defined, but they may be changed by providing -values to any of the following parameters, where B<n> is either a 6 digit -hex RGB color value or an ascii name for a color, such as 'red'. - -To illustrate, the following command will produce an html -file F<somefile.pl.html> with "aqua" keywords: - - perltidy -html -hck=00ffff somefile.pl - -and this should be equivalent for most browsers: - - perltidy -html -hck=aqua somefile.pl - -Perltidy merely writes any non-hex names that it sees in the html file. -The following 16 color names are defined in the HTML 3.2 standard: - - black => 000000, - silver => c0c0c0, - gray => 808080, - white => ffffff, - maroon => 800000, - red => ff0000, - purple => 800080, - fuchsia => ff00ff, - green => 008000, - lime => 00ff00, - olive => 808000, - yellow => ffff00 - navy => 000080, - blue => 0000ff, - teal => 008080, - aqua => 00ffff, - -Many more names are supported in specific browsers, but it is safest -to use the hex codes for other colors. Helpful color tables can be -located with an internet search for "HTML color tables". - -Besides color, two other character attributes may be set: bold, and italics. -To set a token type to use bold, use the flag -B<--html-bold-xxxxxx> or B<-hbx>, where B<xxxxxx> or B<x> are the long -or short names from the above table. Conversely, to set a token type to -NOT use bold, use B<--nohtml-bold-xxxxxx> or B<-nhbx>. - -Likewise, to set a token type to use an italic font, use the flag -B<--html-italic-xxxxxx> or B<-hix>, where again B<xxxxxx> or B<x> are the -long or short names from the above table. And to set a token type to -NOT use italics, use B<--nohtml-italic-xxxxxx> or B<-nhix>. - -For example, to use bold braces and lime color, non-bold, italics keywords the -following command would be used: - - perltidy -html -hbs -hck=00FF00 -nhbk -hik somefile.pl - -The background color can be specified with B<--html-color-background=n>, -or B<-hcbg=n> for short, where n is a 6 character hex RGB value. The -default color of text is the value given to B<punctuation>, which is -black as a default. - -Here are some notes and hints: - -1. If you find a preferred set of these parameters, you may want -to create a F<.perltidyrc> file containing them. See the perltidy man -page for an explanation. - -2. Rather than specifying values for these parameters, it is probably -easier to accept the defaults and then edit a style sheet. The style -sheet contains comments which should make this easy. - -3. The syntax-colored html files can be very large, so it may be best to -split large files into smaller pieces to improve download times. - -=back - -=head1 SOME COMMON INPUT CONVENTIONS - -=head2 Specifying Block Types - -Several parameters which refer to code block types may be customized by also -specifying an associated list of block types. The type of a block is the name -of the keyword which introduces that block, such as B<if>, B<else>, or B<sub>. -An exception is a labeled block, which has no keyword, and should be specified -with just a colon. - -For example, the following parameter specifies C<sub>, labels, C<BEGIN>, and -C<END> blocks: - - -cscl="sub : BEGIN END" - -(the meaning of the -cscl parameter is described above.) Note that -quotes are required around the list of block types because of the -spaces. - -=head2 Specifying File Extensions - -Several parameters allow default file extensions to be overridden. For -example, a backup file extension may be specified with B<-bext=ext>, -where B<ext> is some new extension. In order to provides the user some -flexibility, the following convention is used in all cases to decide if -a leading '.' should be used. If the extension C<ext> begins with -C<A-Z>, C<a-z>, or C<0-9>, then it will be appended to the filename with -an intermediate '.' (or perhaps an '_' on VMS systems). Otherwise, it -will be appended directly. - -For example, suppose the file is F<somefile.pl>. For C<-bext=old>, a '.' is -added to give F<somefile.pl.old>. For C<-bext=.old>, no additional '.' is -added, so again the backup file is F<somefile.pl.old>. For C<-bext=~>, then no -dot is added, and the backup file will be F<somefile.pl~> . - -=head1 SWITCHES WHICH MAY BE NEGATED - -The following list shows all short parameter names which allow a prefix -'n' to produce the negated form: - - D anl asc aws b bbb bbc bbs bl bli boc bok bol bot ce - csc dac dbc dcsc ddf dln dnl dop dp dpro dsc dsm dsn dtt dwls - dwrs dws f fll frm fs hsc html ibc icb icp iob isbc lal log - lp lsl ohbr okw ola oll opr opt osbr otr ple ple pod pvl q - sbc sbl schb scp scsb sct se sfp sfs skp sob sohb sop sosb sot - ssc st sts syn t tac tbc toc tp tqw tsc w x bar kis - -Equivalently, the prefix 'no' or 'no-' on the corresponding long names may be -used. - -=head1 LIMITATIONS - -=over 4 - -=item Parsing Limitations - -Perltidy should work properly on most perl scripts. It does a lot of -self-checking, but still, it is possible that an error could be -introduced and go undetected. Therefore, it is essential to make -careful backups and to test reformatted scripts. - -The main current limitation is that perltidy does not scan modules -included with 'use' statements. This makes it necessary to guess the -context of any bare words introduced by such modules. Perltidy has good -guessing algorithms, but they are not infallible. When it must guess, -it leaves a message in the log file. - -If you encounter a bug, please report it. - -=item What perltidy does not parse and format - -Perltidy indents but does not reformat comments and C<qw> quotes. -Perltidy does not in any way modify the contents of here documents or -quoted text, even if they contain source code. (You could, however, -reformat them separately). Perltidy does not format 'format' sections -in any way. And, of course, it does not modify pod documents. - -=back - -=head1 FILES - -=over 4 - -=item Temporary files - -Under the -html option with the default --pod2html flag, a temporary file is -required to pass text to Pod::Html. Unix systems will try to use the POSIX -tmpnam() function. Otherwise the file F<perltidy.TMP> will be temporarily -created in the current working directory. - -=item Special files when standard input is used - -When standard input is used, the log file, if saved, is F<perltidy.LOG>, -and any errors are written to F<perltidy.ERR> unless the B<-se> flag is -set. These are saved in the current working directory. - -=item Files overwritten - -The following file extensions are used by perltidy, and files with these -extensions may be overwritten or deleted: F<.ERR>, F<.LOG>, F<.TEE>, -and/or F<.tdy>, F<.html>, and F<.bak>, depending on the run type and -settings. - -=item Files extensions limitations - -Perltidy does not operate on files for which the run could produce a file with -a duplicated file extension. These extensions include F<.LOG>, F<.ERR>, -F<.TEE>, and perhaps F<.tdy> and F<.bak>, depending on the run type. The -purpose of this rule is to prevent generating confusing filenames such as -F<somefile.tdy.tdy.tdy>. - -=back - -=head1 SEE ALSO - -perlstyle(1), Perl::Tidy(3) - -=head1 VERSION - -This man page documents perltidy version 20071205. - -=head1 CREDITS - -Michael Cartmell supplied code for adaptation to VMS and helped with -v-strings. - -Yves Orton supplied code for adaptation to the various versions -of Windows. - -Axel Rose supplied a patch for MacPerl. - -Hugh S. Myers designed and implemented the initial Perl::Tidy module interface. - -Many others have supplied key ideas, suggestions, and bug reports; -see the CHANGES file. - -=head1 AUTHOR - - Steve Hancock - email: perltidy at users.sourceforge.net - http://perltidy.sourceforge.net - -=head1 COPYRIGHT - -Copyright (c) 2000-2006 by Steve Hancock - -=head1 LICENSE - -This package is free software; you can redistribute it and/or modify it -under the terms of the "GNU General Public License". - -Please refer to the file "COPYING" for details. - -=head1 DISCLAIMER - -This package is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -See the "GNU General Public License" for more details. +#!/usr/bin/perl +package main; + +use lib "./"; +use lib "../indenters"; +use PerlTidyLib; + + +my $arg_string = undef; + +# give Macs a chance to provide command line parameters +if ($^O =~ /Mac/) { + $arg_string = + MacPerl::Ask( 'Please enter @ARGV (-h for help)', + defined $ARGV[0] ? "\"$ARGV[0]\"" : "" ); +} + +Perl::Tidy::perltidy(argv => $arg_string); + +__END__ + +=head1 NAME + +perltidy - a perl script indenter and reformatter + +=head1 SYNOPSIS + + perltidy [ options ] file1 file2 file3 ... + (output goes to file1.tdy, file2.tdy, file3.tdy, ...) + perltidy [ options ] file1 -o outfile + perltidy [ options ] file1 -st >outfile + perltidy [ options ] <infile >outfile + +=head1 DESCRIPTION + +Perltidy reads a perl script and writes an indented, reformatted script. + +Many users will find enough information in L<"EXAMPLES"> to get +started. New users may benefit from the short tutorial +which can be found at +http://perltidy.sourceforge.net/tutorial.html + +A convenient aid to systematically defining a set of style parameters +can be found at +http://perltidy.sourceforge.net/stylekey.html + +Perltidy can produce output on either of two modes, depending on the +existence of an B<-html> flag. Without this flag, the output is passed +through a formatter. The default formatting tries to follow the +recommendations in perlstyle(1), but it can be controlled in detail with +numerous input parameters, which are described in L<"FORMATTING +OPTIONS">. + +When the B<-html> flag is given, the output is passed through an HTML +formatter which is described in L<"HTML OPTIONS">. + +=head1 EXAMPLES + + perltidy somefile.pl + +This will produce a file F<somefile.pl.tdy> containing the script reformatted +using the default options, which approximate the style suggested in +perlstyle(1). Perltidy never changes the input file. + + perltidy *.pl + +Execute perltidy on all F<.pl> files in the current directory with the +default options. The output will be in files with an appended F<.tdy> +extension. For any file with an error, there will be a file with extension +F<.ERR>. + + perltidy -b file1.pl file2.pl + +Modify F<file1.pl> and F<file1.pl> in place, and backup the originals to +F<file1.pl.bak> and F<file2.pl.bak>. If F<file1.pl.bak> and/or F<file2.pl.bak> +already exist, they will be overwritten. + + perltidy -gnu somefile.pl + +Execute perltidy on file F<somefile.pl> with a style which approximates the +GNU Coding Standards for C programs. The output will be F<somefile.pl.tdy>. + + perltidy -i=3 somefile.pl + +Execute perltidy on file F<somefile.pl>, with 3 columns for each level of +indentation (B<-i=3>) instead of the default 4 columns. There will not be any +tabs in the reformatted script, except for any which already exist in comments, +pod documents, quotes, and here documents. Output will be F<somefile.pl.tdy>. + + perltidy -i=3 -et=8 somefile.pl + +Same as the previous example, except that leading whitespace will +be entabbed with one tab character per 8 spaces. + + perltidy -ce -l=72 somefile.pl + +Execute perltidy on file F<somefile.pl> with all defaults except use "cuddled +elses" (B<-ce>) and a maximum line length of 72 columns (B<-l=72>) instead of +the default 80 columns. + + perltidy -g somefile.pl + +Execute perltidy on file F<somefile.pl> and save a log file F<somefile.pl.LOG> +which shows the nesting of braces, parentheses, and square brackets at +the start of every line. + + perltidy -html somefile.pl + +This will produce a file F<somefile.pl.html> containing the script with +html markup. The output file will contain an embedded style sheet in +the <HEAD> section which may be edited to change the appearance. + + perltidy -html -css=mystyle.css somefile.pl + +This will produce a file F<somefile.pl.html> containing the script with +html markup. This output file will contain a link to a separate style +sheet file F<mystyle.css>. If the file F<mystyle.css> does not exist, +it will be created. If it exists, it will not be overwritten. + + perltidy -html -pre somefile.pl + +Write an html snippet with only the PRE section to F<somefile.pl.html>. +This is useful when code snippets are being formatted for inclusion in a +larger web page. No style sheet will be written in this case. + + perltidy -html -ss >mystyle.css + +Write a style sheet to F<mystyle.css> and exit. + + perltidy -html -frm mymodule.pm + +Write html with a frame holding a table of contents and the source code. The +output files will be F<mymodule.pm.html> (the frame), F<mymodule.pm.toc.html> +(the table of contents), and F<mymodule.pm.src.html> (the source code). + +=head1 OPTIONS - OVERVIEW + +The entire command line is scanned for options, and they are processed +before any files are processed. As a result, it does not matter +whether flags are before or after any filenames. However, the relative +order of parameters is important, with later parameters overriding the +values of earlier parameters. + +For each parameter, there is a long name and a short name. The short +names are convenient for keyboard input, while the long names are +self-documenting and therefore useful in scripts. It is customary to +use two leading dashes for long names, but one may be used. + +Most parameters which serve as on/off flags can be negated with a +leading "n" (for the short name) or a leading "no" or "no-" (for the +long name). For example, the flag to outdent long quotes is is B<-olq> +or B<--outdent-long-quotes>. The flag to skip this is B<-nolq> +or B<--nooutdent-long-quotes> or B<--no-outdent-long-quotes>. + +Options may not be bundled together. In other words, options B<-q> and +B<-g> may NOT be entered as B<-qg>. + +Option names may be terminated early as long as they are uniquely identified. +For example, instead of B<--dump-token-types>, it would be sufficient to enter +B<--dump-tok>, or even B<--dump-t>, to uniquely identify this command. + +=head2 I/O control + +The following parameters concern the files which are read and written. + +=over 4 + +=item B<-h>, B<--help> + +Show summary of usage and exit. + +=item B<-o>=filename, B<--outfile>=filename + +Name of the output file (only if a single input file is being +processed). If no output file is specified, and output is not +redirected to the standard output, the output will go to F<filename.tdy>. + +=item B<-st>, B<--standard-output> + +Perltidy must be able to operate on an arbitrarily large number of files +in a single run, with each output being directed to a different output +file. Obviously this would conflict with outputting to the single +standard output device, so a special flag, B<-st>, is required to +request outputting to the standard output. For example, + + perltidy somefile.pl -st >somefile.new.pl + +This option may only be used if there is just a single input file. +The default is B<-nst> or B<--nostandard-output>. + +=item B<-se>, B<--standard-error-output> + +If perltidy detects an error when processing file F<somefile.pl>, its +default behavior is to write error messages to file F<somefile.pl.ERR>. +Use B<-se> to cause all error messages to be sent to the standard error +output stream instead. This directive may be negated with B<-nse>. +Thus, you may place B<-se> in a F<.perltidyrc> and override it when +desired with B<-nse> on the command line. + +=item B<-oext>=ext, B<--output-file-extension>=ext + +Change the extension of the output file to be F<ext> instead of the +default F<tdy> (or F<html> in case the -B<-html> option is used). +See L<Specifying File Extensions>. + +=item B<-opath>=path, B<--output-path>=path + +When perltidy creates a filename for an output file, by default it merely +appends an extension to the path and basename of the input file. This +parameter causes the path to be changed to F<path> instead. + +The path should end in a valid path separator character, but perltidy will try +to add one if it is missing. + +For example + + perltidy somefile.pl -opath=/tmp/ + +will produce F</tmp/somefile.pl.tdy>. Otherwise, F<somefile.pl.tdy> will +appear in whatever directory contains F<somefile.pl>. + +If the path contains spaces, it should be placed in quotes. + +This parameter will be ignored if output is being directed to standard output, +or if it is being specified explicitly with the B<-o=s> parameter. + +=item B<-b>, B<--backup-and-modify-in-place> + +Modify the input file or files in-place and save the original with the +extension F<.bak>. Any existing F<.bak> file will be deleted. See next item +for changing the default backup extension. + +A B<-b> flag will be ignored if input is from standard input, or +if the B<-html> flag is set. + +=item B<-bext>=ext, B<--backup-file-extension>=ext + +Change the extension of the backup file to be something other than the +default F<.bak>. See L<Specifying File Extensions>. + +=item B<-w>, B<--warning-output> + +Setting B<-w> causes any non-critical warning +messages to be reported as errors. These include messages +about possible pod problems, possibly bad starting indentation level, +and cautions about indirect object usage. The default, B<-nw> or +B<--nowarning-output>, is not to include these warnings. + +=item B<-q>, B<--quiet> + +Deactivate error messages and syntax checking (for running under +an editor). + +For example, if you use a vi-style editor, such as vim, you may execute +perltidy as a filter from within the editor using something like + + :n1,n2!perltidy -q + +where C<n1,n2> represents the selected text. Without the B<-q> flag, +any error message may mess up your screen, so be prepared to use your +"undo" key. + +=item B<-log>, B<--logfile> + +Save the F<.LOG> file, which has many useful diagnostics. Perltidy always +creates a F<.LOG> file, but by default it is deleted unless a program bug is +suspected. Setting the B<-log> flag forces the log file to be saved. + +=item B<-g=n>, B<--logfile-gap=n> + +Set maximum interval between input code lines in the logfile. This purpose of +this flag is to assist in debugging nesting errors. The value of C<n> is +optional. If you set the flag B<-g> without the value of C<n>, it will be +taken to be 1, meaning that every line will be written to the log file. This +can be helpful if you are looking for a brace, paren, or bracket nesting error. + +Setting B<-g> also causes the logfile to be saved, so it is not necessary to +also include B<-log>. + +If no B<-g> flag is given, a value of 50 will be used, meaning that at least +every 50th line will be recorded in the logfile. This helps prevent +excessively long log files. + +Setting a negative value of C<n> is the same as not setting B<-g> at all. + +=item B<-npro> B<--noprofile> + +Ignore any F<.perltidyrc> command file. Normally, perltidy looks first in +your current directory for a F<.perltidyrc> file of parameters. (The format +is described below). If it finds one, it applies those options to the +initial default values, and then it applies any that have been defined +on the command line. If no F<.perltidyrc> file is found, it looks for one +in your home directory. + +If you set the B<-npro> flag, perltidy will not look for this file. + +=item B<-pro=filename> or B<--profile=filename> + +To simplify testing and switching .perltidyrc files, this command may be +used to specify a configuration file which will override the default +name of .perltidyrc. There must not be a space on either side of the +'=' sign. For example, the line + + perltidy -pro=testcfg + +would cause file F<testcfg> to be used instead of the +default F<.perltidyrc>. + +=item B<-opt>, B<--show-options> + +Write a list of all options used to the F<.LOG> file. +Please see B<--dump-options> for a simpler way to do this. + +=item B<-f>, B<--force-read-binary> + +Force perltidy to process binary files. To avoid producing excessive +error messages, perltidy skips files identified by the system as non-text. +However, valid perl scripts containing binary data may sometimes be identified +as non-text, and this flag forces perltidy to process them. + +=back + +=head1 FORMATTING OPTIONS + +=head2 Basic Options + +=over 4 + +=item B<-l=n>, B<--maximum-line-length=n> + +The default maximum line length is n=80 characters. Perltidy will try +to find line break points to keep lines below this length. However, long +quotes and side comments may cause lines to exceed this length. +Setting B<-l=0> is equivalent to setting B<-l=(a large number)>. + +=item B<-i=n>, B<--indent-columns=n> + +Use n columns per indentation level (default n=4). + +=item tabs + +Using tab characters will almost certainly lead to future portability +and maintenance problems, so the default and recommendation is not to +use them. For those who prefer tabs, however, there are two different +options. + +Except for possibly introducing tab indentation characters, as outlined +below, perltidy does not introduce any tab characters into your file, +and it removes any tabs from the code (unless requested not to do so +with B<-fws>). If you have any tabs in your comments, quotes, or +here-documents, they will remain. + +=over 4 + +=item B<-et=n>, B<--entab-leading-whitespace> + +This flag causes each B<n> initial space characters to be replaced by +one tab character. Note that the integer B<n> is completely independent +of the integer specified for indentation parameter, B<-i=n>. + +=item B<-t>, B<--tabs> + +This flag causes one leading tab character to be inserted for each level +of indentation. Certain other features are incompatible with this +option, and if these options are also given, then a warning message will +be issued and this flag will be unset. One example is the B<-lp> +option. + +=back + +=item B<-syn>, B<--check-syntax> + +This flag causes perltidy to run C<perl -c -T> to check syntax of input +and output. (To change the flags passed to perl, see the next +item, B<-pscf>). The results are written to the F<.LOG> file, which +will be saved if an error is detected in the output script. The output +script is not checked if the input script has a syntax error. Perltidy +does its own checking, but this option employs perl to get a "second +opinion". + +If perl reports errors in the input file, they will not be reported in +the error output unless the B<--warning-output> flag is given. + +The default is B<not> to do this type of syntax checking (although +perltidy will still do as much self-checking as possible). The reason +is that it causes all code in BEGIN blocks to be executed, for all +modules being used, and this opens the door to security issues and +infinite loops when running perltidy. + +=item B<-pscf=s>, B<-perl-syntax-check-flags=s> + +When perl is invoked to check syntax, the normal flags are C<-c -T>. In +addition, if the B<-x> flag is given to perltidy, then perl will also be +passed a B<-x> flag. It should not normally be necessary to change +these flags, but it can be done with the B<-pscf=s> flag. For example, +if the taint flag, C<-T>, is not wanted, the flag could be set to be just +B<-pscf=-c>. + +Perltidy will pass your string to perl with the exception that it will +add a B<-c> and B<-x> if appropriate. The F<.LOG> file will show +exactly what flags were passed to perl. + +=item B<-io>, B<--indent-only> + +This flag is used to deactivate all formatting and line break changes. +When it is in effect, the only change to the script will be indentation. +And any flags controlling whitespace and newlines will be ignored. You +might want to use this if you are perfectly happy with your whitespace +and line breaks, and merely want perltidy to handle the indentation. +(This also speeds up perltidy by well over a factor of two, so it might be +useful when perltidy is merely being used to help find a brace error in +a large script). + +Setting this flag is equivalent to setting B<--freeze-newlines> and +B<--freeze-whitespace>. + +=item B<-ole=s>, B<--output-line-ending=s> + +where s=C<win>, C<dos>, C<unix>, or C<mac>. This flag tells perltidy +to output line endings for a specific system. Normally, +perltidy writes files with the line separator character of the host +system. The C<win> and C<dos> flags have an identical result. + +=item B<-ple>, B<--preserve-line-endings> + +This flag tells perltidy to write its output files with the same line +endings as the input file, if possible. It should work for +B<dos>, B<unix>, and B<mac> line endings. It will only work if perltidy +input comes from a filename (rather than stdin, for example). If +perltidy has trouble determining the input file line ending, it will +revert to the default behavior of using the line ending of the host system. + +=back + +=head2 Code Indentation Control + +=over 4 + +=item B<-ci=n>, B<--continuation-indentation=n> + +Continuation indentation is extra indentation spaces applied when +a long line is broken. The default is n=2, illustrated here: + + my $level = # -ci=2 + ( $max_index_to_go >= 0 ) ? $levels_to_go[0] : $last_output_level; + +The same example, with n=0, is a little harder to read: + + my $level = # -ci=0 + ( $max_index_to_go >= 0 ) ? $levels_to_go[0] : $last_output_level; + +The value given to B<-ci> is also used by some commands when a small +space is required. Examples are commands for outdenting labels, +B<-ola>, and control keywords, B<-okw>. + +When default values are not used, it is suggested that the value B<n> +given with B<-ci=n> be no more than about one-half of the number of +spaces assigned to a full indentation level on the B<-i=n> command. + +=item B<-sil=n> B<--starting-indentation-level=n> + +By default, perltidy examines the input file and tries to determine the +starting indentation level. While it is often zero, it may not be +zero for a code snippet being sent from an editing session. If the +default method does not work correctly, or you want to change the +starting level, use B<-sil=n>, to force the starting level to be n. + +=item List indentation using B<-lp>, B<--line-up-parentheses> + +By default, perltidy indents lists with 4 spaces, or whatever value +is specified with B<-i=n>. Here is a small list formatted in this way: + + # perltidy (default) + @month_of_year = ( + 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', + 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' + ); + +Use the B<-lp> flag to add extra indentation to cause the data to begin +past the opening parentheses of a sub call or list, or opening square +bracket of an anonymous array, or opening curly brace of an anonymous +hash. With this option, the above list would become: + + # perltidy -lp + @month_of_year = ( + 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', + 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' + ); + +If the available line length (see B<-l=n> ) does not permit this much +space, perltidy will use less. For alternate placement of the +closing paren, see the next section. + +This option has no effect on code BLOCKS, such as if/then/else blocks, +which always use whatever is specified with B<-i=n>. Also, the +existence of line breaks and/or block comments between the opening and +closing parens may cause perltidy to temporarily revert to its default +method. + +Note: The B<-lp> option may not be used together with the B<-t> tabs option. +It may, however, be used with the B<-et=n> tab method. + +In addition, any parameter which significantly restricts the ability of +perltidy to choose newlines will conflict with B<-lp> and will cause +B<-lp> to be deactivated. These include B<-io>, B<-fnl>, B<-nanl>, and +B<-ndnl>. The reason is that the B<-lp> indentation style can require +the careful coordination of an arbitrary number of break points in +hierarchical lists, and these flags may prevent that. + +=item B<-cti=n>, B<--closing-token-indentation> + +The B<-cti=n> flag controls the indentation of a line beginning with +a C<)>, C<]>, or a non-block C<}>. Such a line receives: + + -cti = 0 no extra indentation (default) + -cti = 1 extra indentation such that the closing token + aligns with its opening token. + -cti = 2 one extra indentation level if the line looks like: + ); or ]; or }; + -cti = 3 one extra indentation level always + +The flags B<-cti=1> and B<-cti=2> work well with the B<-lp> flag (previous +section). + + # perltidy -lp -cti=1 + @month_of_year = ( + 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', + 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' + ); + + # perltidy -lp -cti=2 + @month_of_year = ( + 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', + 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' + ); + +These flags are merely hints to the formatter and they may not always be +followed. In particular, if -lp is not being used, the indentation for +B<cti=1> is constrained to be no more than one indentation level. + +If desired, this control can be applied independently to each of the +closing container token types. In fact, B<-cti=n> is merely an +abbreviation for B<-cpi=n -csbi=n -cbi=n>, where: +B<-cpi> or B<--closing-paren-indentation> controls B<)>'s, +B<-csbi> or B<--closing-square-bracket-indentation> controls B<]>'s, +B<-cbi> or B<--closing-brace-indentation> controls non-block B<}>'s. + +=item B<-icp>, B<--indent-closing-paren> + +The B<-icp> flag is equivalent to +B<-cti=2>, described in the previous section. The B<-nicp> flag is +equivalent B<-cti=0>. They are included for backwards compatability. + +=item B<-icb>, B<--indent-closing-brace> + +The B<-icb> option gives one extra level of indentation to a brace which +terminates a code block . For example, + + if ($task) { + yyy(); + } # -icb + else { + zzz(); + } + +The default is not to do this, indicated by B<-nicb>. + +=item B<-olq>, B<--outdent-long-quotes> + +When B<-olq> is set, lines which is a quoted string longer than the +value B<maximum-line-length> will have their indentation removed to make +them more readable. This is the default. To prevent such out-denting, +use B<-nolq> or B<--nooutdent-long-lines>. + +=item B<-oll>, B<--outdent-long-lines> + +This command is equivalent to B<--outdent-long-quotes> and +B<--outdent-long-comments>, and it is included for compatibility with previous +versions of perltidy. The negation of this also works, B<-noll> or +B<--nooutdent-long-lines>, and is equivalent to setting B<-nolq> and B<-nolc>. + +=item Outdenting Labels: B<-ola>, B<--outdent-labels> + +This command will cause labels to be outdented by 2 spaces (or whatever B<-ci> +has been set to), if possible. This is the default. For example: + + my $i; + LOOP: while ( $i = <FOTOS> ) { + chomp($i); + next unless $i; + fixit($i); + } + +Use B<-nola> to not outdent labels. + +=item Outdenting Keywords + +=over 4 + +=item B<-okw>, B<--outdent-keywords> + +The command B<-okw> will will cause certain leading control keywords to +be outdented by 2 spaces (or whatever B<-ci> has been set to), if +possible. By default, these keywords are C<redo>, C<next>, C<last>, +C<goto>, and C<return>. The intention is to make these control keywords +easier to see. To change this list of keywords being outdented, see +the next section. + +For example, using C<perltidy -okw> on the previous example gives: + + my $i; + LOOP: while ( $i = <FOTOS> ) { + chomp($i); + next unless $i; + fixit($i); + } + +The default is not to do this. + +=item Specifying Outdented Keywords: B<-okwl=string>, B<--outdent-keyword-list=string> + +This command can be used to change the keywords which are outdented with +the B<-okw> command. The parameter B<string> is a required list of perl +keywords, which should be placed in quotes if there are more than one. +By itself, it does not cause any outdenting to occur, so the B<-okw> +command is still required. + +For example, the commands C<-okwl="next last redo goto" -okw> will cause +those four keywords to be outdented. It is probably simplest to place +any B<-okwl> command in a F<.perltidyrc> file. + +=back + +=back + +=head2 Whitespace Control + +Whitespace refers to the blank space between variables, operators, +and other code tokens. + +=over 4 + +=item B<-fws>, B<--freeze-whitespace> + +This flag causes your original whitespace to remain unchanged, and +causes the rest of the whitespace commands in this section, the +Code Indentation section, and +the Comment Control section to be ignored. + +=item Tightness of curly braces, parentheses, and square brackets. + +Here the term "tightness" will mean the closeness with which +pairs of enclosing tokens, such as parentheses, contain the quantities +within. A numerical value of 0, 1, or 2 defines the tightness, with +0 being least tight and 2 being most tight. Spaces within containers +are always symmetric, so if there is a space after a C<(> then there +will be a space before the corresponding C<)>. + +The B<-pt=n> or B<--paren-tightness=n> parameter controls the space within +parens. The example below shows the effect of the three possible +values, 0, 1, and 2: + + if ( ( my $len_tab = length( $tabstr ) ) > 0 ) { # -pt=0 + if ( ( my $len_tab = length($tabstr) ) > 0 ) { # -pt=1 (default) + if ((my $len_tab = length($tabstr)) > 0) { # -pt=2 + +When n is 0, there is always a space to the right of a '(' and to the left +of a ')'. For n=2 there is never a space. For n=1, the default, there +is a space unless the quantity within the parens is a single token, such +as an identifier or quoted string. + +Likewise, the parameter B<-sbt=n> or B<--square-bracket-tightness=n> +controls the space within square brackets, as illustrated below. + + $width = $col[ $j + $k ] - $col[ $j ]; # -sbt=0 + $width = $col[ $j + $k ] - $col[$j]; # -sbt=1 (default) + $width = $col[$j + $k] - $col[$j]; # -sbt=2 + +Curly braces which do not contain code blocks are controlled by +the parameter B<-bt=n> or B<--brace-tightness=n>. + + $obj->{ $parsed_sql->{ 'table' }[0] }; # -bt=0 + $obj->{ $parsed_sql->{'table'}[0] }; # -bt=1 (default) + $obj->{$parsed_sql->{'table'}[0]}; # -bt=2 + +And finally, curly braces which contain blocks of code are controlled by the +parameter B<-bbt=n> or B<--block-brace-tightness=n> as illustrated in the +example below. + + %bf = map { $_ => -M $_ } grep { /\.deb$/ } dirents '.'; # -bbt=0 (default) + %bf = map { $_ => -M $_ } grep {/\.deb$/} dirents '.'; # -bbt=1 + %bf = map {$_ => -M $_} grep {/\.deb$/} dirents '.'; # -bbt=2 + +=item B<-sts>, B<--space-terminal-semicolon> + +Some programmers prefer a space before all terminal semicolons. The +default is for no such space, and is indicated with B<-nsts> or +B<--nospace-terminal-semicolon>. + + $i = 1 ; # -sts + $i = 1; # -nsts (default) + +=item B<-sfs>, B<--space-for-semicolon> + +Semicolons within B<for> loops may sometimes be hard to see, +particularly when commas are also present. This option places spaces on +both sides of these special semicolons, and is the default. Use +B<-nsfs> or B<--nospace-for-semicolon> to deactivate it. + + for ( @a = @$ap, $u = shift @a ; @a ; $u = $v ) { # -sfs (default) + for ( @a = @$ap, $u = shift @a; @a; $u = $v ) { # -nsfs + +=item B<-asc>, B<--add-semicolons> + +Setting B<-asc> allows perltidy to add any missing optional semicolon at the end +of a line which is followed by a closing curly brace on the next line. This +is the default, and may be deactivated with B<-nasc> or B<--noadd-semicolons>. + +=item B<-dsm>, B<--delete-semicolons> + +Setting B<-dsm> allows perltidy to delete extra semicolons which are +simply empty statements. This is the default, and may be deactivated +with B<-ndsm> or B<--nodelete-semicolons>. (Such semicolons are not +deleted, however, if they would promote a side comment to a block +comment). + +=item B<-aws>, B<--add-whitespace> + +Setting this option allows perltidy to add certain whitespace improve +code readability. This is the default. If you do not want any +whitespace added, but are willing to have some whitespace deleted, use +B<-naws>. (Use B<-fws> to leave whitespace completely unchanged). + +=item B<-dws>, B<--delete-old-whitespace> + +Setting this option allows perltidy to remove some old whitespace +between characters, if necessary. This is the default. If you +do not want any old whitespace removed, use B<-ndws> or +B<--nodelete-old-whitespace>. + +=item Detailed whitespace controls around tokens + +For those who want more detailed control over the whitespace around +tokens, there are four parameters which can directly modify the default +whitespace rules built into perltidy for any token. They are: + +B<-wls=s> or B<--want-left-space=s>, + +B<-nwls=s> or B<--nowant-left-space=s>, + +B<-wrs=s> or B<--want-right-space=s>, + +B<-nwrs=s> or B<--nowant-right-space=s>. + +These parameters are each followed by a quoted string, B<s>, containing a +list of token types. No more than one of each of these parameters +should be specified, because repeating a command-line parameter +always overwrites the previous one before perltidy ever sees it. + +To illustrate how these are used, suppose it is desired that there be no +space on either side of the token types B<= + - / *>. The following two +parameters would specify this desire: + + -nwls="= + - / *" -nwrs="= + - / *" + +(Note that the token types are in quotes, and that they are separated by +spaces). With these modified whitespace rules, the following line of math: + + $root = -$b + sqrt( $b * $b - 4. * $a * $c ) / ( 2. * $a ); + +becomes this: + + $root=-$b+sqrt( $b*$b-4.*$a*$c )/( 2.*$a ); + +These parameters should be considered to be hints to perltidy rather +than fixed rules, because perltidy must try to resolve conflicts that +arise between them and all of the other rules that it uses. One +conflict that can arise is if, between two tokens, the left token wants +a space and the right one doesn't. In this case, the token not wanting +a space takes priority. + +It is necessary to have a list of all token types in order to create +this type of input. Such a list can be obtained by the command +B<--dump-token-types>. Also try the B<-D> flag on a short snippet of code +and look at the .DEBUG file to see the tokenization. + +B<WARNING> Be sure to put these tokens in quotes to avoid having them +misinterpreted by your command shell. + +=item Space between specific keywords and opening paren + +When an opening paren follows a Perl keyword, no space is introduced after the +keyword, unless it is (by default) one of these: + + my local our and or eq ne if else elsif until unless + while for foreach return switch case given when + +These defaults can be modified with two commands: + +B<-sak=s> or B<--space-after-keyword=s> adds keywords. + +B<-nsak=s> or B<--nospace-after-keyword=s> removes keywords. + +where B<s> is a list of keywords (in quotes if necessary). For example, + + my ( $a, $b, $c ) = @_; # default + my( $a, $b, $c ) = @_; # -nsak="my local our" + +To put a space after all keywords, see the next item. + +=item Space between all keywords and opening parens + +When an opening paren follows a function or keyword, no space is introduced +after the keyword except for the keywords noted in the previous item. To +always put a space between a function or keyword and its opening paren, +use the command: + +B<-skp> or B<--space-keyword-paren> + +You will probably also want to use the flag B<-sfp> (next item) too. + +=item Space between all function names and opening parens + +When an opening paren follows a function the default is not to introduce +a space. To cause a space to be introduced use: + +B<-sfp> or B<--space-function-paren> + + myfunc( $a, $b, $c ); # default + myfunc ( $a, $b, $c ); # -sfp + +You will probably also want to use the flag B<-skp> (previous item) too. + +=item Trimming whitespace around C<qw> quotes + +B<-tqw> or B<--trim-qw> provide the default behavior of trimming +spaces around multi-line C<qw> quotes and indenting them appropriately. + +B<-ntqw> or B<--notrim-qw> cause leading and trailing whitespace around +multi-line C<qw> quotes to be left unchanged. This option will not +normally be necessary, but was added for testing purposes, because in +some versions of perl, trimming C<qw> quotes changes the syntax tree. + +=back + +=head2 Comment Controls + +Perltidy has a number of ways to control the appearance of both block comments +and side comments. The term B<block comment> here refers to a full-line +comment, whereas B<side comment> will refer to a comment which appears on a +line to the right of some code. + +=over 4 + +=item B<-ibc>, B<--indent-block-comments> + +Block comments normally look best when they are indented to the same +level as the code which follows them. This is the default behavior, but +you may use B<-nibc> to keep block comments left-justified. Here is an +example: + + # this comment is indented (-ibc, default) + if ($task) { yyy(); } + +The alternative is B<-nibc>: + + # this comment is not indented (-nibc) + if ($task) { yyy(); } + +See also the next item, B<-isbc>, as well as B<-sbc>, for other ways to +have some indented and some outdented block comments. + +=item B<-isbc>, B<--indent-spaced-block-comments> + +If there is no leading space on the line, then the comment will not be +indented, and otherwise it may be. + +If both B<-ibc> and B<-isbc> are set, then B<-isbc> takes priority. + +=item B<-olc>, B<--outdent-long-comments> + +When B<-olc> is set, lines which are full-line (block) comments longer +than the value B<maximum-line-length> will have their indentation +removed. This is the default; use B<-nolc> to prevent outdenting. + +=item B<-msc=n>, B<--minimum-space-to-comment=n> + +Side comments look best when lined up several spaces to the right of +code. Perltidy will try to keep comments at least n spaces to the +right. The default is n=4 spaces. + +=item B<-fpsc=n>, B<--fixed-position-side-comment=n> + +This parameter tells perltidy to line up side comments in column number B<n> +whenever possible. The default, n=0, is not do do this. + +=item B<-hsc>, B<--hanging-side-comments> + +By default, perltidy tries to identify and align "hanging side +comments", which are something like this: + + my $IGNORE = 0; # This is a side comment + # This is a hanging side comment + # And so is this + +A comment is considered to be a hanging side comment if (1) it immediately +follows a line with a side comment, or another hanging side comment, and +(2) there is some leading whitespace on the line. +To deactivate this feature, use B<-nhsc> or B<--nohanging-side-comments>. +If block comments are preceded by a blank line, or have no leading +whitespace, they will not be mistaken as hanging side comments. + +=item Closing Side Comments + +A closing side comment is a special comment which perltidy can +automatically create and place after the closing brace of a code block. +They can be useful for code maintenance and debugging. The command +B<-csc> (or B<--closing-side-comments>) adds or updates closing side +comments. For example, here is a small code snippet + + sub message { + if ( !defined( $_[0] ) ) { + print("Hello, World\n"); + } + else { + print( $_[0], "\n" ); + } + } + +And here is the result of processing with C<perltidy -csc>: + + sub message { + if ( !defined( $_[0] ) ) { + print("Hello, World\n"); + } + else { + print( $_[0], "\n" ); + } + } ## end sub message + +A closing side comment was added for C<sub message> in this case, but not +for the C<if> and C<else> blocks, because they were below the 6 line +cutoff limit for adding closing side comments. This limit may be +changed with the B<-csci> command, described below. + +The command B<-dcsc> (or B<--delete-closing-side-comments>) reverses this +process and removes these comments. + +Several commands are available to modify the behavior of these two basic +commands, B<-csc> and B<-dcsc>: + +=over 4 + +=item B<-csci=n>, or B<--closing-side-comment-interval=n> + +where C<n> is the minimum number of lines that a block must have in +order for a closing side comment to be added. The default value is +C<n=6>. To illustrate: + + # perltidy -csci=2 -csc + sub message { + if ( !defined( $_[0] ) ) { + print("Hello, World\n"); + } ## end if ( !defined( $_[0] )) + else { + print( $_[0], "\n" ); + } ## end else [ if ( !defined( $_[0] )) + } ## end sub message + +Now the C<if> and C<else> blocks are commented. However, now this has +become very cluttered. + +=item B<-cscp=string>, or B<--closing-side-comment-prefix=string> + +where string is the prefix used before the name of the block type. The +default prefix, shown above, is C<## end>. This string will be added to +closing side comments, and it will also be used to recognize them in +order to update, delete, and format them. Any comment identified as a +closing side comment will be placed just a single space to the right of +its closing brace. + +=item B<-cscl=string>, or B<--closing-side-comment-list-string> + +where C<string> is a list of block types to be tagged with closing side +comments. By default, all code block types preceded by a keyword or +label (such as C<if>, C<sub>, and so on) will be tagged. The B<-cscl> +command changes the default list to be any selected block types; see +L<Specifying Block Types>. +For example, the following command +requests that only C<sub>'s, labels, C<BEGIN>, and C<END> blocks be +affected by any B<-csc> or B<-dcsc> operation: + + -cscl="sub : BEGIN END" + +=item B<-csct=n>, or B<--closing-side-comment-maximum-text=n> + +The text appended to certain block types, such as an C<if> block, is +whatever lies between the keyword introducing the block, such as C<if>, +and the opening brace. Since this might be too much text for a side +comment, there needs to be a limit, and that is the purpose of this +parameter. The default value is C<n=20>, meaning that no additional +tokens will be appended to this text after its length reaches 20 +characters. Omitted text is indicated with C<...>. (Tokens, including +sub names, are never truncated, however, so actual lengths may exceed +this). To illustrate, in the above example, the appended text of the +first block is C< ( !defined( $_[0] )...>. The existing limit of +C<n=20> caused this text to be truncated, as indicated by the C<...>. + +=item B<-csce=n>, or B<--closing-side-comment-else-flag=n> + +The default, B<n=0>, places the text of the opening C<if> statement after any +terminal C<else>. + +If B<n=2> is used, then each C<elsif> is also given the text of the opening +C<if> statement. Also, an C<else> will include the text of a preceding +C<elsif> statement. Note that this may result some long closing +side comments. + +If B<n=1> is used, the results will be the same as B<n=2> whenever the +resulting line length is less than the maximum allowed. + +=item B<-cscw>, or B<--closing-side-comment-warnings> + +This parameter is intended to help make the initial transition to the use of +closing side comments. +It causes two +things to happen if a closing side comment replaces an existing, different +closing side comment: first, an error message will be issued, and second, the +original side comment will be placed alone on a new specially marked comment +line for later attention. + +The intent is to avoid clobbering existing hand-written side comments +which happen to match the pattern of closing side comments. This flag +should only be needed on the first run with B<-csc>. + +=back + +B<Important Notes on Closing Side Comments:> + +=over 4 + +=item * + +Closing side comments are only placed on lines terminated with a closing +brace. Certain closing styles, such as the use of cuddled elses +(B<-ce>), preclude the generation of some closing side comments. + +=item * + +Please note that adding or deleting of closing side comments takes +place only through the commands B<-csc> or B<-dcsc>. The other commands, +if used, merely modify the behavior of these two commands. + +=item * + +It is recommended that the B<-cscw> flag be used along with B<-csc> on +the first use of perltidy on a given file. This will prevent loss of +any existing side comment data which happens to have the csc prefix. + +=item * + +Once you use B<-csc>, you should continue to use it so that any +closing side comments remain correct as code changes. Otherwise, these +comments will become incorrect as the code is updated. + +=item * + +If you edit the closing side comments generated by perltidy, you must also +change the prefix to be different from the closing side comment prefix. +Otherwise, your edits will be lost when you rerun perltidy with B<-csc>. For +example, you could simply change C<## end> to be C<## End>, since the test is +case sensitive. You may also want to use the B<-ssc> flag to keep these +modified closing side comments spaced the same as actual closing side comments. + +=item * + +Temporarily generating closing side comments is a useful technique for +exploring and/or debugging a perl script, especially one written by someone +else. You can always remove them with B<-dcsc>. + +=back + +=item Static Block Comments + +Static block comments are block comments with a special leading pattern, +C<##> by default, which will be treated slightly differently from other +block comments. They effectively behave as if they had glue along their +left and top edges, because they stick to the left edge and previous line +when there is no blank spaces in those places. This option is +particularly useful for controlling how commented code is displayed. + +=over 4 + +=item B<-sbc>, B<--static-block-comments> + +When B<-sbc> is used, a block comment with a special leading pattern, C<##> by +default, will be treated specially. + +Comments so identified are treated as follows: + +=over 4 + +=item * + +If there is no leading space on the line, then the comment will not +be indented, and otherwise it may be, + +=item * + +no new blank line will be +inserted before such a comment, and + +=item * + +such a comment will never become +a hanging side comment. + +=back + +For example, assuming C<@month_of_year> is +left-adjusted: + + @month_of_year = ( # -sbc (default) + 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', + ## 'Dec', 'Nov' + 'Nov', 'Dec'); + +Without this convention, the above code would become + + @month_of_year = ( # -nsbc + 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', + + ## 'Dec', 'Nov' + 'Nov', 'Dec' + ); + +which is not as clear. +The default is to use B<-sbc>. This may be deactivated with B<-nsbc>. + +=item B<-sbcp=string>, B<--static-block-comment-prefix=string> + +This parameter defines the prefix used to identify static block comments +when the B<-sbc> parameter is set. The default prefix is C<##>, +corresponding to C<-sbcp=##>. The prefix is actually part of a perl +pattern used to match lines and it must either begin with C<#> or C<^#>. +In the first case a prefix ^\s* will be added to match any leading +whitespace, while in the second case the pattern will match only +comments with no leading whitespace. For example, to +identify all comments as static block comments, one would use C<-sbcp=#>. +To identify all left-adjusted comments as static block comments, use C<-sbcp='^#'>. + +Please note that B<-sbcp> merely defines the pattern used to identify static +block comments; it will not be used unless the switch B<-sbc> is set. Also, +please be aware that since this string is used in a perl regular expression +which identifies these comments, it must enable a valid regular expression to +be formed. + +A pattern which can be useful is: + + -sbcp=^#{2,}[^\s#] + +This pattern requires a static block comment to have at least one character +which is neither a # nor a space. It allows a line containing only '#' +characters to be rejected as a static block comment. Such lines are often used +at the start and end of header information in subroutines and should not be +separated from the intervening comments, which typically begin with just a +single '#'. + +=item B<-osbc>, B<--outdent-static-block-comments> + +The command B<-osbc> will will cause static block comments to be outdented by 2 +spaces (or whatever B<-ci=n> has been set to), if possible. + +=back + +=item Static Side Comments + +Static side comments are side comments with a special leading pattern. +This option can be useful for controlling how commented code is displayed +when it is a side comment. + +=over 4 + +=item B<-ssc>, B<--static-side-comments> + +When B<-ssc> is used, a side comment with a static leading pattern, which is +C<##> by default, will be be spaced only a single space from previous +character, and it will not be vertically aligned with other side comments. + +The default is B<-nssc>. + +=item B<-sscp=string>, B<--static-side-comment-prefix=string> + +This parameter defines the prefix used to identify static side comments +when the B<-ssc> parameter is set. The default prefix is C<##>, +corresponding to C<-sscp=##>. + +Please note that B<-sscp> merely defines the pattern used to identify +static side comments; it will not be used unless the switch B<-ssc> is +set. Also, note that this string is used in a perl regular expression +which identifies these comments, so it must enable a valid regular +expression to be formed. + +=back + + +=back + +=head2 Skipping Selected Sections of Code + +Selected lines of code may be passed verbatim to the output without any +formatting. This feature is enabled by default but can be disabled with +the B<--noformat-skipping> or B<-nfs> flag. It should be used sparingly to +avoid littering code with markers, but it might be helpful for working +around occasional problems. For example it might be useful for keeping +the indentation of old commented code unchanged, keeping indentation of +long blocks of aligned comments unchanged, keeping certain list +formatting unchanged, or working around a glitch in perltidy. + +=over 4 + +=item B<-fs>, B<--format-skipping> + +This flag, which is enabled by default, causes any code between +special beginning and ending comment markers to be passed to the +output without formatting. The default beginning marker is #<<< +and the default ending marker is #>>> but they +may be changed (see next items below). Additional text may appear on +these special comment lines provided that it is separated from the +marker by at least one space. For example + + #<<< do not let perltidy touch this + my @list = (1, + 1, 1, + 1, 2, 1, + 1, 3, 3, 1, + 1, 4, 6, 4, 1,); + #>>> + +The comment markers may be placed at any location that a block comment may +appear. If they do not appear to be working, use the -log flag and examine the +F<.LOG> file. Use B<-nfs> to disable this feature. + +=item B<-fsb=string>, B<--format-skipping-begin=string> + +The B<-fsb=string> parameter may be used to change the beginning marker for +format skipping. The default is equivalent to -fsb='#<<<'. The string that +you enter must begin with a # and should be in quotes as necessary to get past +the command shell of your system. It is actually the leading text of a pattern +that is constructed by appending a '\s', so you must also include backslashes +for characters to be taken literally rather than as patterns. + +Some examples show how example strings become patterns: + + -fsb='#\{\{\{' becomes /^#\{\{\{\s/ which matches #{{{ but not #{{{{ + -fsb='#\*\*' becomes /^#\*\*\s/ which matches #** but not #*** + -fsb='#\*{2,}' becomes /^#\*{2,}\s/ which matches #** and #***** + +=item B<-fse=string>, B<--format-skipping-end=string> + +The B<-fsb=string> is the corresponding parameter used to change the +ending marker for format skipping. The default is equivalent to +-fse='#<<<'. + +=back + +=head2 Line Break Control + +=over 4 + +=item B<-fnl>, B<--freeze-newlines> + +If you do not want any changes to the line breaks in your script, set +B<-fnl>, and they will remain fixed, and the rest of the commands in +this section and sections +L<Controlling List Formatting>, +L<Retaining or Ignoring Existing Line Breaks>, and +L<Blank Line Control> will be ignored. You may want to use B<-noll> +with this. + +=item B<-ce>, B<--cuddled-else> + +Enable the "cuddled else" style, in which C<else> and C<elsif> are +follow immediately after the curly brace closing the previous block. +The default is not to use cuddled elses, and is indicated with the flag +B<-nce> or B<--nocuddled-else>. Here is a comparison of the +alternatives: + + if ($task) { + yyy(); + } else { # -ce + zzz(); + } + + if ($task) { + yyy(); + } + else { # -nce (default) + zzz(); + } + +=item B<-bl>, B<--opening-brace-on-new-line> + +Use the flag B<-bl> to place the opening brace on a new line: + + if ( $input_file eq '-' ) # -bl + { + important_function(); + } + +This flag applies to all structural blocks, including sub's (unless +the B<-sbl> flag is set -- see next item). + +The default style, B<-nbl>, places an opening brace on the same line as +the keyword introducing it. For example, + + if ( $input_file eq '-' ) { # -nbl (default) + +=item B<-sbl>, B<--opening-sub-brace-on-new-line> + +The flag B<-sbl> can be used to override the value of B<-bl> for +opening sub braces. For example, + + perltidy -sbl + +produces this result: + + sub message + { + if (!defined($_[0])) { + print("Hello, World\n"); + } + else { + print($_[0], "\n"); + } + } + +This flag is negated with B<-nsbl>. If B<-sbl> is not specified, +the value of B<-bl> is used. + +=item B<-bli>, B<--brace-left-and-indent> + +The flag B<-bli> is the same as B<-bl> but in addition it causes one +unit of continuation indentation ( see B<-ci> ) to be placed before +an opening and closing block braces. + +For example, + + if ( $input_file eq '-' ) # -bli + { + important_function(); + } + +By default, this extra indentation occurs for blocks of type: +B<if>, B<elsif>, B<else>, B<unless>, B<for>, B<foreach>, B<sub>, +B<while>, B<until>, and also with a preceding label. The next item +shows how to change this. + +=item B<-blil=s>, B<--brace-left-and-indent-list=s> + +Use this parameter to change the types of block braces for which the +B<-bli> flag applies; see L<Specifying Block Types>. For example, +B<-blil='if elsif else'> would apply it to only C<if/elsif/else> blocks. + +=item B<-bar>, B<--opening-brace-always-on-right> + +The default style, B<-nbl> places the opening code block brace on a new +line if it does not fit on the same line as the opening keyword, like +this: + + if ( $bigwasteofspace1 && $bigwasteofspace2 + || $bigwasteofspace3 && $bigwasteofspace4 ) + { + big_waste_of_time(); + } + +To force the opening brace to always be on the right, use the B<-bar> +flag. In this case, the above example becomes + + if ( $bigwasteofspace1 && $bigwasteofspace2 + || $bigwasteofspace3 && $bigwasteofspace4 ) { + big_waste_of_time(); + } + +A conflict occurs if both B<-bl> and B<-bar> are specified. + +=item B<-otr>, B<--opening-token-right> and related flags + +The B<-otr> flag is a hint that perltidy should not place a break between a +comma and an opening token. For example: + + # default formatting + push @{ $self->{$module}{$key} }, + { + accno => $ref->{accno}, + description => $ref->{description} + }; + + # perltidy -otr + push @{ $self->{$module}{$key} }, { + accno => $ref->{accno}, + description => $ref->{description} + }; + +The flag B<-otr> is actually a synonym for three other flags +which can be used to control parens, hash braces, and square brackets +separately if desired: + + -opr or --opening-paren-right + -ohbr or --opening-hash-brace-right + -osbr or --opening-square-bracket-right + +=item Vertical tightness of non-block curly braces, parentheses, and square brackets. + +These parameters control what shall be called vertical tightness. Here are the +main points: + +=over 4 + +=item * + +Opening tokens (except for block braces) are controlled by B<-vt=n>, or +B<--vertical-tightness=n>, where + + -vt=0 always break a line after opening token (default). + -vt=1 do not break unless this would produce more than one + step in indentation in a line. + -vt=2 never break a line after opening token + +=item * + +You must also use the B<-lp> flag when you use the B<-vt> flag; the +reason is explained below. + +=item * + +Closing tokens (except for block braces) are controlled by B<-vtc=n>, or +B<--vertical-tightness-closing=n>, where + + -vtc=0 always break a line before a closing token (default), + -vtc=1 do not break before a closing token which is followed + by a semicolon or another closing token, and is not in + a list environment. + -vtc=2 never break before a closing token. + +The rules for B<-vtc=1> are designed to maintain a reasonable balance +between tightness and readability in complex lists. + +=item * + +Different controls may be applied to to different token types, +and it is also possible to control block braces; see below. + +=item * + +Finally, please note that these vertical tightness flags are merely +hints to the formatter, and it cannot always follow them. Things which +make it difficult or impossible include comments, blank lines, blocks of +code within a list, and possibly the lack of the B<-lp> parameter. +Also, these flags may be ignored for very small lists (2 or 3 lines in +length). + +=back + +Here are some examples: + + # perltidy -lp -vt=0 -vtc=0 + %romanNumerals = ( + one => 'I', + two => 'II', + three => 'III', + four => 'IV', + ); + + # perltidy -lp -vt=1 -vtc=0 + %romanNumerals = ( one => 'I', + two => 'II', + three => 'III', + four => 'IV', + ); + + # perltidy -lp -vt=1 -vtc=1 + %romanNumerals = ( one => 'I', + two => 'II', + three => 'III', + four => 'IV', ); + +The difference between B<-vt=1> and B<-vt=2> is shown here: + + # perltidy -lp -vt=1 + $init->add( + mysprintf( "(void)find_threadsv(%s);", + cstring( $threadsv_names[ $op->targ ] ) + ) + ); + + # perltidy -lp -vt=2 + $init->add( mysprintf( "(void)find_threadsv(%s);", + cstring( $threadsv_names[ $op->targ ] ) + ) + ); + +With B<-vt=1>, the line ending in C<add(> does not combine with the next +line because the next line is not balanced. This can help with +readability, but B<-vt=2> can be used to ignore this rule. + +The tightest, and least readable, code is produced with both C<-vt=2> and +C<-vtc=2>: + + # perltidy -lp -vt=2 -vtc=2 + $init->add( mysprintf( "(void)find_threadsv(%s);", + cstring( $threadsv_names[ $op->targ ] ) ) ); + +Notice how the code in all of these examples collapses vertically as +B<-vt> increases, but the indentation remains unchanged. This is +because perltidy implements the B<-vt> parameter by first formatting as +if B<-vt=0>, and then simply overwriting one output line on top of the +next, if possible, to achieve the desired vertical tightness. The +B<-lp> indentation style has been designed to allow this vertical +collapse to occur, which is why it is required for the B<-vt> parameter. + +The B<-vt=n> and B<-vtc=n> parameters apply to each type of container +token. If desired, vertical tightness controls can be applied +independently to each of the closing container token types. + +The parameters for controlling parentheses are B<-pvt=n> or +B<--paren-vertical-tightness=n>, and B<-pcvt=n> or +B<--paren-vertical-tightness-closing=n>. + +Likewise, the parameters for square brackets are B<-sbvt=n> or +B<--square-bracket-vertical-tightness=n>, and B<-sbcvt=n> or +B<--square-bracket-vertical-tightness-closing=n>. + +Finally, the parameters for controlling non-code block braces are +B<-bvt=n> or B<--brace-vertical-tightness=n>, and B<-bcvt=n> or +B<--brace-vertical-tightness-closing=n>. + +In fact, the parameter B<-vt=n> is actually just an abbreviation for +B<-pvt=n -bvt=n sbvt=n>, and likewise B<-vtc=n> is an abbreviation +for B<-pvtc=n -bvtc=n sbvtc=n>. + +=item B<-bbvt=n> or B<--block-brace-vertical-tightness=n> + +The B<-bbvt=n> flag is just like the B<-vt=n> flag but applies +to opening code block braces. + + -bbvt=0 break after opening block brace (default). + -bbvt=1 do not break unless this would produce more than one + step in indentation in a line. + -bbvt=2 do not break after opening block brace. + +It is necessary to also use either B<-bl> or B<-bli> for this to work, +because, as with other vertical tightness controls, it is implemented by +simply overwriting a line ending with an opening block brace with the +subsequent line. For example: + + # perltidy -bli -bbvt=0 + if ( open( FILE, "< $File" ) ) + { + while ( $File = <FILE> ) + { + $In .= $File; + $count++; + } + close(FILE); + } + + # perltidy -bli -bbvt=1 + if ( open( FILE, "< $File" ) ) + { while ( $File = <FILE> ) + { $In .= $File; + $count++; + } + close(FILE); + } + +By default this applies to blocks associated with keywords B<if>, +B<elsif>, B<else>, B<unless>, B<for>, B<foreach>, B<sub>, B<while>, +B<until>, and also with a preceding label. This can be changed with +the parameter B<-bbvtl=string>, or +B<--block-brace-vertical-tightness-list=string>, where B<string> is a +space-separated list of block types. For more information on the +possible values of this string, see L<Specifying Block Types> + +For example, if we want to just apply this style to C<if>, +C<elsif>, and C<else> blocks, we could use +C<perltidy -bli -bbvt=1 -bbvtl='if elsif else'>. + +There is no vertical tightness control for closing block braces; with +the exception of one-line blocks, they will normally remain on a +separate line. + +=item B<-sot>, B<--stack-opening-tokens> and related flags + +The B<-sot> flag tells perltidy to "stack" opening tokens +when possible to avoid lines with isolated opening tokens. + +For example: + + # default + $opt_c = Text::CSV_XS->new( + { + binary => 1, + sep_char => $opt_c, + always_quote => 1, + } + ); + + # -sot + $opt_c = Text::CSV_XS->new( { + binary => 1, + sep_char => $opt_c, + always_quote => 1, + } + ); + +For detailed control of individual closing tokens the following +controls can be used: + + -sop or --stack-opening-paren + -sohb or --stack-opening-hash-brace + -sosb or --stack-opening-square-bracket + +The flag B<-sot> is a synonym for B<-sop -sohb -sosb>. + +=item B<-sct>, B<--stack-closing-tokens> and related flags + +The B<-sct> flag tells perltidy to "stack" closing tokens +when possible to avoid lines with isolated closing tokens. + +For example: + + # default + $opt_c = Text::CSV_XS->new( + { + binary => 1, + sep_char => $opt_c, + always_quote => 1, + } + ); + + # -sct + $opt_c = Text::CSV_XS->new( + { + binary => 1, + sep_char => $opt_c, + always_quote => 1, + } ); + +The B<-sct> flag is somewhat similar to the B<-vtc> flags, and in some +cases it can give a similar result. The difference is that the B<-vtc> +flags try to avoid lines with leading opening tokens by "hiding" them at +the end of a previous line, whereas the B<-sct> flag merely tries to +reduce the number of lines with isolated closing tokens by stacking them +but does not try to hide them. For example: + + # -vtc=2 + $opt_c = Text::CSV_XS->new( + { + binary => 1, + sep_char => $opt_c, + always_quote => 1, } ); + +For detailed control of the stacking of individual closing tokens the +following controls can be used: + + -scp or --stack-closing-paren + -schb or --stack-closing-hash-brace + -scsb or --stack-closing-square-bracket + +The flag B<-sct> is a synonym for B<-scp -schb -scsb>. + +=item B<-dnl>, B<--delete-old-newlines> + +By default, perltidy first deletes all old line break locations, and then it +looks for good break points to match the desired line length. Use B<-ndnl> +or B<--nodelete-old-newlines> to force perltidy to retain all old line break +points. + +=item B<-anl>, B<--add-newlines> + +By default, perltidy will add line breaks when necessary to create +continuations of long lines and to improve the script appearance. Use +B<-nanl> or B<--noadd-newlines> to prevent any new line breaks. + +This flag does not prevent perltidy from eliminating existing line +breaks; see B<--freeze-newlines> to completely prevent changes to line +break points. + +=item Controlling whether perltidy breaks before or after operators + +Four command line parameters provide some control over whether +a line break should be before or after specific token types. +Two parameters give detailed control: + +B<-wba=s> or B<--want-break-after=s>, and + +B<-wbb=s> or B<--want-break-before=s>. + +These parameters are each followed by a quoted string, B<s>, containing +a list of token types (separated only by spaces). No more than one of each +of these parameters should be specified, because repeating a +command-line parameter always overwrites the previous one before +perltidy ever sees it. + +By default, perltidy breaks B<after> these token types: + % + - * / x != == >= <= =~ !~ < > | & + = **= += *= &= <<= &&= -= /= |= >>= ||= //= .= %= ^= x= + +And perltidy breaks B<before> these token types by default: + . << >> -> && || // + +To illustrate, to cause a break after a concatenation operator, C<'.'>, +rather than before it, the command line would be + + -wba="." + +As another example, the following command would cause a break before +math operators C<'+'>, C<'-'>, C<'/'>, and C<'*'>: + + -wbb="+ - / *" + +These commands should work well for most of the token types that perltidy uses +(use B<--dump-token-types> for a list). Also try the B<-D> flag on a short +snippet of code and look at the .DEBUG file to see the tokenization. However, +for a few token types there may be conflicts with hardwired logic which cause +unexpected results. One example is curly braces, which should be controlled +with the parameter B<bl> provided for that purpose. + +B<WARNING> Be sure to put these tokens in quotes to avoid having them +misinterpreted by your command shell. + +Two additional parameters are available which, though they provide no further +capability, can simplify input are: + +B<-baao> or B<--break-after-all-operators>, + +B<-bbao> or B<--break-before-all-operators>. + +The -baao sets the default to be to break after all of the following operators: + + % + - * / x != == >= <= =~ !~ < > | & + = **= += *= &= <<= &&= -= /= |= >>= ||= //= .= %= ^= x= + . : ? && || and or err xor + +and the B<-bbao> flag sets the default to break before all of these operators. +These can be used to define an initial break preference which can be fine-tuned +with the B<-wba> and B<-wbb> flags. For example, to break before all operators +except an B<=> one could use --bbao -wba='=' rather than listing every +single perl operator except B<=> on a -wbb flag. + +=back + +=head2 Controlling List Formatting + +Perltidy attempts to place comma-separated arrays of values in tables +which look good. Its default algorithms usually work well, and they +have been improving with each release, but several parameters are +available to control list formatting. + +=over 4 + +=item B<-boc>, B<--break-at-old-comma-breakpoints> + +This flag tells perltidy to try to break at all old commas. This is not +the default. Normally, perltidy makes a best guess at list formatting, +and seldom uses old comma breakpoints. Usually this works well, +but consider: + + my @list = (1, + 1, 1, + 1, 2, 1, + 1, 3, 3, 1, + 1, 4, 6, 4, 1,); + +The default formatting will flatten this down to one line: + + # perltidy (default) + my @list = ( 1, 1, 1, 1, 2, 1, 1, 3, 3, 1, 1, 4, 6, 4, 1, ); + +which hides the structure. Using B<-boc>, plus additional flags +to retain the original style, yields + + # perltidy -boc -lp -pt=2 -vt=1 -vtc=1 + my @list = (1, + 1, 1, + 1, 2, 1, + 1, 3, 3, 1, + 1, 4, 6, 4, 1,); + +A disadvantage of this flag is that all tables in the file +must already be nicely formatted. For another possibility see +the -fs flag in L<Skipping Selected Sections of Code>. + +=item B<-mft=n>, B<--maximum-fields-per-table=n> + +If the computed number of fields for any table exceeds B<n>, then it +will be reduced to B<n>. The default value for B<n> is a large number, +40. While this value should probably be left unchanged as a general +rule, it might be used on a small section of code to force a list to +have a particular number of fields per line, and then either the B<-boc> +flag could be used to retain this formatting, or a single comment could +be introduced somewhere to freeze the formatting in future applications +of perltidy. + + # perltidy -mft=2 + @month_of_year = ( + 'Jan', 'Feb', + 'Mar', 'Apr', + 'May', 'Jun', + 'Jul', 'Aug', + 'Sep', 'Oct', + 'Nov', 'Dec' + ); + +=item B<-cab=n>, B<--comma-arrow-breakpoints=n> + +A comma which follows a comma arrow, '=>', requires special +consideration. In a long list, it is common to break at all such +commas. This parameter can be used to control how perltidy breaks at +these commas. (However, it will have no effect if old comma breaks are +being forced because B<-boc> is used). The possible values of B<n> are: + + n=0 break at all commas after => + n=1 stable: break at all commas after => unless this would break + an existing one-line container (default) + 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 + +For example, given the following single line, perltidy by default will +not add any line breaks because it would break the existing one-line +container: + + bless { B => $B, Root => $Root } => $package; + +Using B<-cab=0> will force a break after each comma-arrow item: + + # perltidy -cab=0: + bless { + B => $B, + Root => $Root + } => $package; + +If perltidy is subsequently run with this container broken, then by +default it will break after each '=>' because the container is now +broken. To reform a one-line container, the parameter B<-cab=2> would +be needed. + +The flag B<-cab=3> can be used to prevent these commas from being +treated specially. In this case, an item such as "01" => 31 is +treated as a single item in a table. The number of fields in this table +will be determined by the same rules that are used for any other table. +Here is an example. + + # perltidy -cab=3 + my %last_day = ( + "01" => 31, "02" => 29, "03" => 31, "04" => 30, + "05" => 31, "06" => 30, "07" => 31, "08" => 31, + "09" => 30, "10" => 31, "11" => 30, "12" => 31 + ); + +=back + +=head2 Retaining or Ignoring Existing Line Breaks + +Several additional parameters are available for controlling the extent +to which line breaks in the input script influence the output script. +In most cases, the default parameter values are set so that, if a choice +is possible, the output style follows the input style. For example, if +a short logical container is broken in the input script, then the +default behavior is for it to remain broken in the output script. + +Most of the parameters in this section would only be required for a +one-time conversion of a script from short container lengths to longer +container lengths. The opposite effect, of converting long container +lengths to shorter lengths, can be obtained by temporarily using a short +maximum line length. + +=over 4 + +=item B<-bol>, B<--break-at-old-logical-breakpoints> + +By default, if a logical expression is broken at a C<&&>, C<||>, C<and>, +or C<or>, then the container will remain broken. Also, breaks +at internal keywords C<if> and C<unless> will normally be retained. +To prevent this, and thus form longer lines, use B<-nbol>. + +=item B<-bok>, B<--break-at-old-keyword-breakpoints> + +By default, perltidy will retain a breakpoint before keywords which may +return lists, such as C<sort> and <map>. This allows chains of these +operators to be displayed one per line. Use B<-nbok> to prevent +retaining these breakpoints. + +=item B<-bot>, B<--break-at-old-ternary-breakpoints> + +By default, if a conditional (ternary) operator is broken at a C<:>, +then it will remain broken. To prevent this, and thereby +form longer lines, use B<-nbot>. + +=item B<-iob>, B<--ignore-old-breakpoints> + +Use this flag to tell perltidy to ignore existing line breaks to the +maximum extent possible. This will tend to produce the longest possible +containers, regardless of type, which do not exceed the line length +limit. + +=item B<-kis>, B<--keep-interior-semicolons> + +Use the B<-kis> flag to prevent breaking at a semicolon if +there was no break there in the input file. Normally +perltidy places a newline after each semicolon which +terminates a statement unless several statements are +contained within a one-line brace block. To illustrate, +consider the following input lines: + + dbmclose(%verb_delim); undef %verb_delim; + dbmclose(%expanded); undef %expanded; + +The default is to break after each statement, giving + + dbmclose(%verb_delim); + undef %verb_delim; + dbmclose(%expanded); + undef %expanded; + +With B<perltidy -kis> the multiple statements are retained: + + dbmclose(%verb_delim); undef %verb_delim; + dbmclose(%expanded); undef %expanded; + +The statements are still subject to the specified value +of B<maximum-line-length> and will be broken if this +maximum is exceeed. + +=back + +=head2 Blank Line Control + +Blank lines can improve the readability of a script if they are carefully +placed. Perltidy has several commands for controlling the insertion, +retention, and removal of blank lines. + +=over 4 + +=item B<-bbc>, B<--blanks-before-comments> + +A blank line will be introduced before a full-line comment. This is the +default. Use B<-nbbc> or B<--noblanks-before-comments> to prevent +such blank lines from being introduced. + +=item B<-bbs>, B<--blanks-before-subs> + +A blank line will be introduced before a B<sub> definition, unless it is a +one-liner or preceded by a comment. A blank line will also be introduced +before a B<package> statement and a B<BEGIN> and B<END> block. This is the +default. The intention is to help display the structure of a program by +setting off certain key sections of code. This is negated with B<-nbbs> or +B<--noblanks-before-subs>. + +=item B<-bbb>, B<--blanks-before-blocks> + +A blank line will be introduced before blocks of coding delimited by +B<for>, B<foreach>, B<while>, B<until>, and B<if>, B<unless>, in the following +circumstances: + +=over 4 + +=item * + +The block is not preceded by a comment. + +=item * + +The block is not a one-line block. + +=item * + +The number of consecutive non-blank lines at the current indentation depth is at least B<-lbl> +(see next section). + +=back + +This is the default. The intention of this option is to introduce +some space within dense coding. +This is negated with B<-nbbb> or B<--noblanks-before-blocks>. + +=item B<-lbl=n> B<--long-block-line-count=n> + +This controls how often perltidy is allowed to add blank lines before +certain block types (see previous section). The default is 8. Entering +a value of B<0> is equivalent to entering a very large number. + +=item B<-mbl=n> B<--maximum-consecutive-blank-lines=n> + +This parameter specifies the maximum number of consecutive blank lines +in the output script. The default is n=1. If the input file has more +than n consecutive blank lines, the number will be reduced to n. +(This obviously does not apply to pod sections, here-documents, and quotes). + +=item B<-sob>, B<--swallow-optional-blank-lines> + +All blank lines not required by the above flags, B<-bbb>, B<-bbs>, and B<-bbc>, +will be deleted. (But essential blank lines above pod documents will be +retained). This is NOT the default. + +=item B<-nsob>, B<--noswallow-optional-blank-lines> + +Retain blank lines, including those which do not corresponding to flags +B<-bbb>, B<-bbs>, and B<-bbc>. This is the default. The number of +blanks retained is subject to the limit imposed by +B<--maximum-consecutive-blank-lines>, however. + +=back + +=head2 Styles + +A style refers to a convenient collection of existing parameters. + +=over 4 + +=item B<-gnu>, B<--gnu-style> + +B<-gnu> gives an approximation to the GNU Coding Standards (which do +not apply to perl) as they are sometimes implemented. At present, this +style overrides the default style with the following parameters: + + -lp -bl -noll -pt=2 -bt=2 -sbt=2 -icp + +=item B<-pbp>, B<--perl-best-practices> + +B<-pbp> is an abbreviation for the parameters in the book B<Perl Best Practices> +by Damian Conway: + + -l=78 -i=4 -ci=4 -st -se -vt=2 -cti=0 -pt=1 -bt=1 -sbt=1 -bbt=1 -nsfs -nolq + -wbb="% + - * / x != == >= <= =~ !~ < > | & = + **= += *= &= <<= &&= -= /= |= >>= ||= //= .= %= ^= x=" + +Note that the -st and -se flags make perltidy act as a filter on one file only. +These can be overridden with -nst and -nse if necessary. + +=back + +=head2 Other Controls + +=over 4 + +=item Deleting selected text + +Perltidy can selectively delete comments and/or pod documentation. The +command B<-dac> or B<--delete-all-comments> will delete all comments +B<and> all pod documentation, leaving just code and any leading system +control lines. + +The command B<-dp> or B<--delete-pod> will remove all pod documentation +(but not comments). + +Two commands which remove comments (but not pod) are: B<-dbc> or +B<--delete-block-comments> and B<-dsc> or B<--delete-side-comments>. +(Hanging side comments will be deleted with block comments here.) + +The negatives of these commands also work, and are the defaults. When +block comments are deleted, any leading 'hash-bang' will be retained. +Also, if the B<-x> flag is used, any system commands before a leading +hash-bang will be retained (even if they are in the form of comments). + +=item Writing selected text to a file + +When perltidy writes a formatted text file, it has the ability to also +send selected text to a file with a F<.TEE> extension. This text can +include comments and pod documentation. + +The command B<-tac> or B<--tee-all-comments> will write all comments +B<and> all pod documentation. + +The command B<-tp> or B<--tee-pod> will write all pod documentation (but +not comments). + +The commands which write comments (but not pod) are: B<-tbc> or +B<--tee-block-comments> and B<-tsc> or B<--tee-side-comments>. +(Hanging side comments will be written with block comments here.) + +The negatives of these commands also work, and are the defaults. + +=item Using a F<.perltidyrc> command file + +If you use perltidy frequently, you probably won't be happy until you +create a F<.perltidyrc> file to avoid typing commonly-used parameters. +Perltidy will first look in your current directory for a command file +named F<.perltidyrc>. If it does not find one, it will continue looking +for one in other standard locations. + +These other locations are system-dependent, and may be displayed with +the command C<perltidy -dpro>. Under Unix systems, it will first look +for an environment variable B<PERLTIDY>. Then it will look for a +F<.perltidyrc> file in the home directory, and then for a system-wide +file F</usr/local/etc/perltidyrc>, and then it will look for +F</etc/perltidyrc>. Note that these last two system-wide files do not +have a leading dot. Further system-dependent information will be found +in the INSTALL file distributed with perltidy. + +This file is free format, and simply a list of parameters, just as they +would be entered on a command line. Any number of lines may be used, +with any number of parameters per line, although it may be easiest to +read with one parameter per line. Blank lines are ignored, and text +after a '#' is ignored to the end of a line. + +Here is an example of a F<.perltidyrc> file: + + # This is a simple of a .perltidyrc configuration file + # This implements a highly spaced style + -se # errors to standard error output + -w # show all warnings + -bl # braces on new lines + -pt=0 # parens not tight at all + -bt=0 # braces not tight + -sbt=0 # square brackets not tight + +The parameters in the F<.perltidyrc> file are installed first, so any +parameters given on the command line will have priority over them. + +To avoid confusion, perltidy ignores any command in the .perltidyrc +file which would cause some kind of dump and an exit. These are: + + -h -v -ddf -dln -dop -dsn -dtt -dwls -dwrs -ss + +There are several options may be helpful in debugging a F<.perltidyrc> +file: + +=over 4 + +=item * + +A very helpful command is B<--dump-profile> or B<-dpro>. It writes a +list of all configuration filenames tested to standard output, and +if a file is found, it dumps the content to standard output before +exiting. So, to find out where perltidy looks for its configuration +files, and which one if any it selects, just enter + + perltidy -dpro + +=item * + +It may be simplest to develop and test configuration files with +alternative names, and invoke them with B<-pro=filename> on the command +line. Then rename the desired file to F<.perltidyrc> when finished. + +=item * + +The parameters in the F<.perltidyrc> file can be switched off with +the B<-npro> option. + +=item * + +The commands B<--dump-options>, B<--dump-defaults>, B<--dump-long-names>, +and B<--dump-short-names>, all described below, may all be helpful. + +=back + +=item Creating a new abbreviation + +A special notation is available for use in a F<.perltidyrc> file +for creating an abbreviation for a group +of options. This can be used to create a +shorthand for one or more styles which are frequently, but not always, +used. The notation is to group the options within curly braces which +are preceded by the name of the alias (without leading dashes), like this: + + newword { + -opt1 + -opt2 + } + +where B<newword> is the abbreviation, and B<opt1>, etc, are existing parameters +I<or other abbreviations>. The main syntax requirement is that +the new abbreviation must begin on a new line. +Space before and after the curly braces is optional. +For a +specific example, the following line + + airy {-bl -pt=0 -bt=0 -sbt=0} + +could be placed in a F<.perltidyrc> file, and then invoked at will with + + perltidy -airy somefile.pl + +(Either C<-airy> or C<--airy> may be used). + +=item Skipping leading non-perl commands with B<-x> or B<--look-for-hash-bang> + +If your script has leading lines of system commands or other text which +are not valid perl code, and which are separated from the start of the +perl code by a "hash-bang" line, ( a line of the form C<#!...perl> ), +you must use the B<-x> flag to tell perltidy not to parse and format any +lines before the "hash-bang" line. This option also invokes perl with a +-x flag when checking the syntax. This option was originally added to +allow perltidy to parse interactive VMS scripts, but it should be used +for any script which is normally invoked with C<perl -x>. + +=item Making a file unreadable + +The goal of perltidy is to improve the readability of files, but there +are two commands which have the opposite effect, B<--mangle> and +B<--extrude>. They are actually +merely aliases for combinations of other parameters. Both of these +strip all possible whitespace, but leave comments and pod documents, +so that they are essentially reversible. The +difference between these is that B<--mangle> puts the fewest possible +line breaks in a script while B<--extrude> puts the maximum possible. +Note that these options do not provided any meaningful obfuscation, because +perltidy can be used to reformat the files. They were originally +developed to help test the tokenization logic of perltidy, but they +have other uses. +One use for B<--mangle> is the following: + + perltidy --mangle myfile.pl -st | perltidy -o myfile.pl.new + +This will form the maximum possible number of one-line blocks (see next +section), and can sometimes help clean up a badly formatted script. + +A similar technique can be used with B<--extrude> instead of B<--mangle> +to make the minimum number of one-line blocks. + +Another use for B<--mangle> is to combine it with B<-dac> to reduce +the file size of a perl script. + +=item One-line blocks + +There are a few points to note regarding one-line blocks. A one-line +block is something like this, + + if ($x > 0) { $y = 1 / $x } + +where the contents within the curly braces is short enough to fit +on a single line. + +With few exceptions, perltidy retains existing one-line blocks, if it +is possible within the line-length constraint, but it does not attempt +to form new ones. In other words, perltidy will try to follow the +one-line block style of the input file. + +If an existing one-line block is longer than the maximum line length, +however, it will be broken into multiple lines. When this happens, perltidy +checks for and adds any optional terminating semicolon (unless the B<-nasc> +option is used) if the block is a code block. + +The main exception is that perltidy will attempt to form new one-line +blocks following the keywords C<map>, C<eval>, and C<sort>, because +these code blocks are often small and most clearly displayed in a single +line. + +One-line block rules can conflict with the cuddled-else option. When +the cuddled-else option is used, perltidy retains existing one-line +blocks, even if they do not obey cuddled-else formatting. + +Occasionally, when one-line blocks get broken because they exceed the +available line length, the formatting will violate the requested brace style. +If this happens, reformatting the script a second time should correct +the problem. + +=item Debugging + +The following flags are available for debugging: + +B<--dump-defaults> or B<-ddf> will write the default option set to standard output and quit + +B<--dump-profile> or B<-dpro> will write the name of the current +configuration file and its contents to standard output and quit. + +B<--dump-options> or B<-dop> will write current option set to standard +output and quit. + +B<--dump-long-names> or B<-dln> will write all command line long names (passed +to Get_options) to standard output and quit. + +B<--dump-short-names> or B<-dsn> will write all command line short names +to standard output and quit. + +B<--dump-token-types> or B<-dtt> will write a list of all token types +to standard output and quit. + +B<--dump-want-left-space> or B<-dwls> will write the hash %want_left_space +to standard output and quit. See the section on controlling whitespace +around tokens. + +B<--dump-want-right-space> or B<-dwrs> will write the hash %want_right_space +to standard output and quit. See the section on controlling whitespace +around tokens. + +B<-DEBUG> will write a file with extension F<.DEBUG> for each input file +showing the tokenization of all lines of code. + +=item Working with MakeMaker, AutoLoader and SelfLoader + +The first $VERSION line of a file which might be eval'd by MakeMaker +is passed through unchanged except for indentation. +Use B<--nopass-version-line>, or B<-npvl>, to deactivate this feature. + +If the AutoLoader module is used, perltidy will continue formatting +code after seeing an __END__ line. +Use B<--nolook-for-autoloader>, or B<-nlal>, to deactivate this feature. + +Likewise, if the SelfLoader module is used, perltidy will continue formatting +code after seeing a __DATA__ line. +Use B<--nolook-for-selfloader>, or B<-nlsl>, to deactivate this feature. + +=item Working around problems with older version of Perl + +Perltidy contains a number of rules which help avoid known subtleties +and problems with older versions of perl, and these rules always +take priority over whatever formatting flags have been set. For example, +perltidy will usually avoid starting a new line with a bareword, because +this might cause problems if C<use strict> is active. + +There is no way to override these rules. + +=back + +=head1 HTML OPTIONS + +=over 4 + +=item The B<-html> master switch + +The flag B<-html> causes perltidy to write an html file with extension +F<.html>. So, for example, the following command + + perltidy -html somefile.pl + +will produce a syntax-colored html file named F<somefile.pl.html> +which may be viewed with a browser. + +B<Please Note>: In this case, perltidy does not do any formatting to the +input file, and it does not write a formatted file with extension +F<.tdy>. This means that two perltidy runs are required to create a +fully reformatted, html copy of a script. + +=item The B<-pre> flag for code snippets + +When the B<-pre> flag is given, only the pre-formatted section, within +the <PRE> and </PRE> tags, will be output. This simplifies inclusion +of the output in other files. The default is to output a complete +web page. + +=item The B<-nnn> flag for line numbering + +When the B<-nnn> flag is given, the output lines will be numbered. + +=item The B<-toc>, or B<--html-table-of-contents> flag + +By default, a table of contents to packages and subroutines will be +written at the start of html output. Use B<-ntoc> to prevent this. +This might be useful, for example, for a pod document which contains a +number of unrelated code snippets. This flag only influences the code +table of contents; it has no effect on any table of contents produced by +pod2html (see next item). + +=item The B<-pod>, or B<--pod2html> flag + +There are two options for formatting pod documentation. The default is +to pass the pod through the Pod::Html module (which forms the basis of +the pod2html utility). Any code sections are formatted by perltidy, and +the results then merged. Note: perltidy creates a temporary file when +Pod::Html is used; see L<"FILES">. Also, Pod::Html creates temporary +files for its cache. + +NOTE: Perltidy counts the number of C<=cut> lines, and either moves the +pod text to the top of the html file if there is one C<=cut>, or leaves +the pod text in its original order (interleaved with code) otherwise. + +Most of the flags accepted by pod2html may be included in the perltidy +command line, and they will be passed to pod2html. In some cases, +the flags have a prefix C<pod> to emphasize that they are for the +pod2html, and this prefix will be removed before they are passed to +pod2html. The flags which have the additional C<pod> prefix are: + + --[no]podheader --[no]podindex --[no]podrecurse --[no]podquiet + --[no]podverbose --podflush + +The flags which are unchanged from their use in pod2html are: + + --backlink=s --cachedir=s --htmlroot=s --libpods=s --title=s + --podpath=s --podroot=s + +where 's' is an appropriate character string. Not all of these flags are +available in older versions of Pod::Html. See your Pod::Html documentation for +more information. + +The alternative, indicated with B<-npod>, is not to use Pod::Html, but +rather to format pod text in italics (or whatever the stylesheet +indicates), without special html markup. This is useful, for example, +if pod is being used as an alternative way to write comments. + +=item The B<-frm>, or B<--frames> flag + +By default, a single html output file is produced. This can be changed +with the B<-frm> option, which creates a frame holding a table of +contents in the left panel and the source code in the right side. This +simplifies code browsing. Assume, for example, that the input file is +F<MyModule.pm>. Then, for default file extension choices, these three +files will be created: + + MyModule.pm.html - the frame + MyModule.pm.toc.html - the table of contents + MyModule.pm.src.html - the formatted source code + +Obviously this file naming scheme requires that output be directed to a real +file (as opposed to, say, standard output). If this is not the +case, or if the file extension is unknown, the B<-frm> option will be +ignored. + +=item The B<-text=s>, or B<--html-toc-extension> flag + +Use this flag to specify the extra file extension of the table of contents file +when html frames are used. The default is "toc". +See L<Specifying File Extensions>. + +=item The B<-sext=s>, or B<--html-src-extension> flag + +Use this flag to specify the extra file extension of the content file when html +frames are used. The default is "src". +See L<Specifying File Extensions>. + +=item The B<-hent>, or B<--html-entities> flag + +This flag controls the use of Html::Entities for html formatting. By +default, the module Html::Entities is used to encode special symbols. +This may not be the right thing for some browser/language +combinations. Use --nohtml-entities or -nhent to prevent this. + +=item Style Sheets + +Style sheets make it very convenient to control and adjust the +appearance of html pages. The default behavior is to write a page of +html with an embedded style sheet. + +An alternative to an embedded style sheet is to create a page with a +link to an external style sheet. This is indicated with the +B<-css=filename>, where the external style sheet is F<filename>. The +external style sheet F<filename> will be created if and only if it does +not exist. This option is useful for controlling multiple pages from a +single style sheet. + +To cause perltidy to write a style sheet to standard output and exit, +use the B<-ss>, or B<--stylesheet>, flag. This is useful if the style +sheet could not be written for some reason, such as if the B<-pre> flag +was used. Thus, for example, + + perltidy -html -ss >mystyle.css + +will write a style sheet with the default properties to file +F<mystyle.css>. + +The use of style sheets is encouraged, but a web page without a style +sheets can be created with the flag B<-nss>. Use this option if you +must to be sure that older browsers (roughly speaking, versions prior to +4.0 of Netscape Navigator and Internet Explorer) can display the +syntax-coloring of the html files. + +=item Controlling HTML properties + +Note: It is usually more convenient to accept the default properties +and then edit the stylesheet which is produced. However, this section +shows how to control the properties with flags to perltidy. + +Syntax colors may be changed from their default values by flags of the either +the long form, B<-html-color-xxxxxx=n>, or more conveniently the short form, +B<-hcx=n>, where B<xxxxxx> is one of the following words, and B<x> is the +corresponding abbreviation: + + Token Type xxxxxx x + ---------- -------- -- + comment comment c + number numeric n + identifier identifier i + bareword, function bareword w + keyword keyword k + quite, pattern quote q + here doc text here-doc-text h + here doc target here-doc-target hh + punctuation punctuation pu + parentheses paren p + structural braces structure s + semicolon semicolon sc + colon colon co + comma comma cm + label label j + sub definition name subroutine m + pod text pod-text pd + +A default set of colors has been defined, but they may be changed by providing +values to any of the following parameters, where B<n> is either a 6 digit +hex RGB color value or an ascii name for a color, such as 'red'. + +To illustrate, the following command will produce an html +file F<somefile.pl.html> with "aqua" keywords: + + perltidy -html -hck=00ffff somefile.pl + +and this should be equivalent for most browsers: + + perltidy -html -hck=aqua somefile.pl + +Perltidy merely writes any non-hex names that it sees in the html file. +The following 16 color names are defined in the HTML 3.2 standard: + + black => 000000, + silver => c0c0c0, + gray => 808080, + white => ffffff, + maroon => 800000, + red => ff0000, + purple => 800080, + fuchsia => ff00ff, + green => 008000, + lime => 00ff00, + olive => 808000, + yellow => ffff00 + navy => 000080, + blue => 0000ff, + teal => 008080, + aqua => 00ffff, + +Many more names are supported in specific browsers, but it is safest +to use the hex codes for other colors. Helpful color tables can be +located with an internet search for "HTML color tables". + +Besides color, two other character attributes may be set: bold, and italics. +To set a token type to use bold, use the flag +B<--html-bold-xxxxxx> or B<-hbx>, where B<xxxxxx> or B<x> are the long +or short names from the above table. Conversely, to set a token type to +NOT use bold, use B<--nohtml-bold-xxxxxx> or B<-nhbx>. + +Likewise, to set a token type to use an italic font, use the flag +B<--html-italic-xxxxxx> or B<-hix>, where again B<xxxxxx> or B<x> are the +long or short names from the above table. And to set a token type to +NOT use italics, use B<--nohtml-italic-xxxxxx> or B<-nhix>. + +For example, to use bold braces and lime color, non-bold, italics keywords the +following command would be used: + + perltidy -html -hbs -hck=00FF00 -nhbk -hik somefile.pl + +The background color can be specified with B<--html-color-background=n>, +or B<-hcbg=n> for short, where n is a 6 character hex RGB value. The +default color of text is the value given to B<punctuation>, which is +black as a default. + +Here are some notes and hints: + +1. If you find a preferred set of these parameters, you may want +to create a F<.perltidyrc> file containing them. See the perltidy man +page for an explanation. + +2. Rather than specifying values for these parameters, it is probably +easier to accept the defaults and then edit a style sheet. The style +sheet contains comments which should make this easy. + +3. The syntax-colored html files can be very large, so it may be best to +split large files into smaller pieces to improve download times. + +=back + +=head1 SOME COMMON INPUT CONVENTIONS + +=head2 Specifying Block Types + +Several parameters which refer to code block types may be customized by also +specifying an associated list of block types. The type of a block is the name +of the keyword which introduces that block, such as B<if>, B<else>, or B<sub>. +An exception is a labeled block, which has no keyword, and should be specified +with just a colon. + +For example, the following parameter specifies C<sub>, labels, C<BEGIN>, and +C<END> blocks: + + -cscl="sub : BEGIN END" + +(the meaning of the -cscl parameter is described above.) Note that +quotes are required around the list of block types because of the +spaces. + +=head2 Specifying File Extensions + +Several parameters allow default file extensions to be overridden. For +example, a backup file extension may be specified with B<-bext=ext>, +where B<ext> is some new extension. In order to provides the user some +flexibility, the following convention is used in all cases to decide if +a leading '.' should be used. If the extension C<ext> begins with +C<A-Z>, C<a-z>, or C<0-9>, then it will be appended to the filename with +an intermediate '.' (or perhaps an '_' on VMS systems). Otherwise, it +will be appended directly. + +For example, suppose the file is F<somefile.pl>. For C<-bext=old>, a '.' is +added to give F<somefile.pl.old>. For C<-bext=.old>, no additional '.' is +added, so again the backup file is F<somefile.pl.old>. For C<-bext=~>, then no +dot is added, and the backup file will be F<somefile.pl~> . + +=head1 SWITCHES WHICH MAY BE NEGATED + +The following list shows all short parameter names which allow a prefix +'n' to produce the negated form: + + D anl asc aws b bbb bbc bbs bl bli boc bok bol bot ce + csc dac dbc dcsc ddf dln dnl dop dp dpro dsc dsm dsn dtt dwls + dwrs dws f fll frm fs hsc html ibc icb icp iob isbc lal log + lp lsl ohbr okw ola oll opr opt osbr otr ple ple pod pvl q + sbc sbl schb scp scsb sct se sfp sfs skp sob sohb sop sosb sot + ssc st sts syn t tac tbc toc tp tqw tsc w x bar kis + +Equivalently, the prefix 'no' or 'no-' on the corresponding long names may be +used. + +=head1 LIMITATIONS + +=over 4 + +=item Parsing Limitations + +Perltidy should work properly on most perl scripts. It does a lot of +self-checking, but still, it is possible that an error could be +introduced and go undetected. Therefore, it is essential to make +careful backups and to test reformatted scripts. + +The main current limitation is that perltidy does not scan modules +included with 'use' statements. This makes it necessary to guess the +context of any bare words introduced by such modules. Perltidy has good +guessing algorithms, but they are not infallible. When it must guess, +it leaves a message in the log file. + +If you encounter a bug, please report it. + +=item What perltidy does not parse and format + +Perltidy indents but does not reformat comments and C<qw> quotes. +Perltidy does not in any way modify the contents of here documents or +quoted text, even if they contain source code. (You could, however, +reformat them separately). Perltidy does not format 'format' sections +in any way. And, of course, it does not modify pod documents. + +=back + +=head1 FILES + +=over 4 + +=item Temporary files + +Under the -html option with the default --pod2html flag, a temporary file is +required to pass text to Pod::Html. Unix systems will try to use the POSIX +tmpnam() function. Otherwise the file F<perltidy.TMP> will be temporarily +created in the current working directory. + +=item Special files when standard input is used + +When standard input is used, the log file, if saved, is F<perltidy.LOG>, +and any errors are written to F<perltidy.ERR> unless the B<-se> flag is +set. These are saved in the current working directory. + +=item Files overwritten + +The following file extensions are used by perltidy, and files with these +extensions may be overwritten or deleted: F<.ERR>, F<.LOG>, F<.TEE>, +and/or F<.tdy>, F<.html>, and F<.bak>, depending on the run type and +settings. + +=item Files extensions limitations + +Perltidy does not operate on files for which the run could produce a file with +a duplicated file extension. These extensions include F<.LOG>, F<.ERR>, +F<.TEE>, and perhaps F<.tdy> and F<.bak>, depending on the run type. The +purpose of this rule is to prevent generating confusing filenames such as +F<somefile.tdy.tdy.tdy>. + +=back + +=head1 SEE ALSO + +perlstyle(1), Perl::Tidy(3) + +=head1 VERSION + +This man page documents perltidy version 20071205. + +=head1 CREDITS + +Michael Cartmell supplied code for adaptation to VMS and helped with +v-strings. + +Yves Orton supplied code for adaptation to the various versions +of Windows. + +Axel Rose supplied a patch for MacPerl. + +Hugh S. Myers designed and implemented the initial Perl::Tidy module interface. + +Many others have supplied key ideas, suggestions, and bug reports; +see the CHANGES file. + +=head1 AUTHOR + + Steve Hancock + email: perltidy at users.sourceforge.net + http://perltidy.sourceforge.net + +=head1 COPYRIGHT + +Copyright (c) 2000-2006 by Steve Hancock + +=head1 LICENSE + +This package is free software; you can redistribute it and/or modify it +under the terms of the "GNU General Public License". + +Please refer to the file "COPYING" for details. + +=head1 DISCLAIMER + +This package is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +See the "GNU General Public License" for more details.