Perltidy

Code layout is often a contentious issue in many programming teams.
Programmers learn a particular coding style and rarely want to change
it just to suit someone else. Programmers may have good reasons for
using their particular style, and it can certainly slow them down or
increase the rate of errors during any period of changing styles. However,
having code which has been written with a hodgepodge of different code
layouts is equally horrible for everyone to maintain.

While coding standards or guidelines are a good idea its often difficult to
develop them or enforce them without buy-in from most of the programmers.
It's even harder to ensure that they cover all the important aspects of
writing Perl code.

Good programming practices, including style guidelines, are covered in
great depth in our Perl Best Practices course which we're running
November 14-15th in Melbourne.

In this perl tip we'll cover Perltidy, which can be used to reformat your
code to adhere to your specified requirements. In addition Perltidy can
detect errors in your code, and generate syntax-highlighted html copies of
your code.

Using Perltidy on code

Perltidy never overwrites your original code, instead it provides a new
file of the same name as your original file with a .tdy extension. Thus
make sure you view that file if you want to see your changes.

Let's assume we have the following ugly code in a program called
test.pl.

use Carp qw/cluck/;my@chickens;sleep until$dawn;cluck$loudly until
open $coop;exit$coop;chomp$food and accept($scraps,$seed);shift
@straw,pop@eggs and cluck$more;until($dusk){seek($many,$worms,
$bugs);join flock($other,@chickens)if split/from others/;tell
WORLD,"sky is falling"if$airplane;}return 2,$coop and sleep
until$dawn;

If we don't like Perltidy's defaults we can easily select our own.
Perltidy allows us to specify many options including: line length,
number of indentation spaces, continuation indentation, tabs or spaces, the
location of the open brace, cuddled elses, closing
token placement, vertical and horizontal tightness. If we prefer the
bsd style of bracket placement, and indent levels of 8 spaces, we
can write:

Finding errors with Perltidy

If Perltidy spots a syntax error in your code it will write out a file
called perltidy.ERR. For example, if we omit our opening brace in the
until loop, with the above code, we get the following error:

There is no previous '{' to match a '}' on line 13
13: }
^
13: Starting negative indentation
15: final indentation level: -1
15: To save a full .LOG file rerun with -g

Generating HTML files

To generate a syntax high-lighted html copy of your code run Perltidy with
the -html option:

perltidy -html test.pl.tdy

Note that this does not create a tidied version of your program at the same
time, it only performs html mark-up. This means that you can use
Perltidy to convert your code to into HTML without changing its
layout.

More information and downloads

If Perltidy is not yet installed on your system you can download it from
Sourceforge.

This site also gives many more examples of how Perltidy can clean up your
code and a style key to
best decide which options are required to suit your coding standard.

Using Perltidy allows everyone to program in whichever style best suits
them and then tidy their Perl script so that it's readable for everyone.
Perltidy writes better Perl code than most of us and is thus an
indispensable tool in your toolkit.