*when used for a municipal programming project
Since June of 2013, I have been working on re-writing my town’s water billing system. This project has included rewriting part of the meter configuration and water billing systems, originally written using Informix 4GL. So this project has included writing new software in Perl and re-writing existing software in Informix 4GL.
The greatest aspect of using Perl — and I can see parallels in Clojure lists, vectors, and maps — is Perl hashes are very flexible. Flexibility is very important in a municipal project. Requirements tend to be come in on the fly, and water consumption and billing rules are certainly not, as folks like to say rocket science, but there are a lot of rules, like what happens when a water meter’s digits rollover to 0000, or you replace a meter and need to calculate consumption based on the old and new meters’ reads. And, most of these rules are documented in one place, the software. And you can only read those rules, if you own the software.
Your programming language needs flexibility, like the ability to cache away a meter reading value that will be displayed on a bill, as opposed to a meter reading value that can be subtracted from another value in which a meter rollover may or may not have occurred. As we now get ready to approve and mail out the first water bills with 3-tier rates, billing for fire service lines (if you have one), as well as the usual administration charge, I credit the [almost] success of the project to the ability to be flexible and modular in our programming language.