I write a lot of sysadmin scripts. Generally, I try to
keep the scripts themselves as short as possible, with most of the
work being done in modules. This has a number of advantages:
- The modules are documented with POD and have tests that exercise them in isolation.
- When writing a suite of scripts, these scripts share the module code (avoids cut n' paste coding).
- The scripts themselves are much shorter and therefore easier to understand and maintain.
- It's quicker to write new scripts because you already have a toolbox of handy routines.
- This approach scales better, especially when writing many large scripts, maintained by many different people.
Chapter 9 of the excellent book
Perl Testing: A Developer's Notebook
contains an interesting tactical trick to better
structure scripts for testability. Their idea is
to have a one-line script mainline that calls a
main() function; that way you can
test the script more easily from outside
by hooking into the script's main() function.
If you are seriously interested in Perl testing, I
strongly recommend getting this book.
See also How a script becomes a module.