Perl Tips
I’ve created this documentation because I’ve been programming with Perl constantly and extensively for the past four years. wish to help up-and-coming Perl programmers achieve their finest.
The vitals
use strict;
Always, always, always, in all of your code, always use strict;
.
You use this pragma by having a line at the top of your code:
use strict;
This module enforces prepending data types with their proper labeling;
this means prepending scalar names with $
, arrays with @
, and hashes
with %
. It also enforces scoping all of your variables using the my
or local
operator.
You will find that good distributed Perl code includes the use of this pragma.
Read up more about this in perldoc strict.
the -w flag
Always, always, always run your Perl code under perl’s -w flag.
You can do this for scripts which load themselves with a #!
line at
the top by making it look like this:
#!/usr/bin/perl -w
Of course, your path to perl
might vary. This flag will catch a lot of
mistakes; one popular one is catching the use of a single ‘equals’
operator, =
, inside of an if
statement, where you almost always want
a ‘double equals’ operator, ==
. You’ll find this an invaluable
timesaver.
You will find that good distributed Perl code runs with this flag.
Read up more about perl’s run-time flags such as -w
in perldoc
perlrun.
Really useful documentation
Perl function documentation
To access help about Perl functions, use perldoc perlfunc. To access help about a specific Perl function, use:
perldoc -f function
I even create an alias func to perldoc -f because I use this so often.
Miscellaneous Perl documentation
Running perldoc perl will give you a listing of all the other wonderful documentation perl comes with.
Specifically useful documentation
Some of this stuff is in the camel book, Programming Perl, but it might be updated with your Perl distribution.
- perldoc perlfaq
- Answers to common questions
- perldoc perlmodlib
- Descriptions of standard Perl modules, and how to create and find others
- perldoc perlsec
- Writing safe Perl code
- perldoc perltrap
- Traps that the unwary and those coming from other languages encounter
- perldoc perlstyle
- Perl style guidelines
Really useful standard modules
use Fatal;
Use this module to catch any calls and die if they return false. This is especially handy to catch system calls that fail such as:
open FILE $filename;
or
chdir $directory;
if they return false, so you don’t have to bother writing statements like
open FILE $filename or die $OS_ERROR;
all the time.
For more information, see perldoc Fatal.
use diagnostics;
This module is a beauty. If you are having compile errors that are giving you short error messages that you don’t understand, use this module to give you a much more verbose output. Note, however, that including this module slows down compilation considerably; it’s advisable to only put it in when you have to.
Read more in perldoc diagnostics.
use IO::File;
and use DirHandle;
These modules give you a better grip on file and directory handles by
putting them inside a scalar (a $
variable). This is instead of having
them ‘hang free’ in variable “globs”, which you create when you make a
call such as:
open FILE $filename;
When you use these modules, you can make nice-looking calls such as:
my $handle = new IO::File $filename;
Using these will help you lexically scope the namespace of your filehandles, and make it more understandable when you pass filehandles to functions.
You can get more documentation on these modules with perldoc IO::File and perldoc DirHandle.
use English;
This module ‘translates’ the awful looking and impossible to remember Perl global variables such as
$/
$?
$!
into the much more readable variables:
$INPUT_RECORD_SEPARATOR
$CHILD_ERROR
$OS_ERROR
I hope no further persuasion is necessary :)
Read up about these in perldoc English or perldoc perlvar.
Really useful CPAN modules
use Class::MethodMaker;
There is so many good things I can say about this module; it totally revamped my Perl object-oriented programming style. Basically, this package writes your methods for you; it can create data-member get/set methods, constructors, initialization methods, and more. This module is similar to Class::Struct but twenty times more powerful and nice to use. It is available from CPAN.
Really useful books
Programming Perl
This is considered to be the definitive reference book for Perl.
Perl Cookbook
This book is a compilation of extremely useful and well-documented Perl routines. If you’re wondering “How can I do this well?”, this is the book to reference.
Object Oriented Perl
This book filled in large gaping gaps in my Perl knowledge concerning object-oriented programming. It revamped my approach to module creation. This book is often overlooked by others as it is not published by O’Reilly, but I consider it a must for anyone who is serious about Perl.