The principle aim of the program was to provide a quick way to manipulate data in CSV files. In order to meet this aim, a data structure of sufficient complexity must be used, so as to keep the data's integrity intact, without sacrificing functionality. The forms of manipulation should include, accessing data, inserting new data, updating existing data, deleting existing data, and creating new files. The program should also incorporate commands not directly involved with data manipulation as necessary.
The second aim was that the program must be completely transactional and either write all edited data back out to disk completely intact, or failing that to a new file leaving the original uncorrupted. This failsafe is for the event of either a user or system interrupt. Before every save event the program creates a backup of the original file, and then overwrites the original file only if the backup was created successfully. If the program is killed unexpectedly by either a user or a system interrupt the program saves the working copy of the file to disk under a new filename which is the original files name prepended by a "." making it a hidden file, and then closes all open files and exits gracefully.
The third aim was to make the program portable. The program will run on Linux, Unix, Solaris and Mac and has been tested on the Windows NT Generation of Microsoft Operating systems and ran as expected. The program can also accept both Unix style, Windows style, and MAC style line endings as each has it's own convention. Unix uses the single character, LF, MAC uses CR, and Windows uses two characters CR and LF.
The fourth aim was to build the program independent of any extended Perl modules. I decided upon this as I wanted the program to run without requiring a user to download additional modules. As such the program is required to run off a base install of Perl.
The program was also required to have logging support. The program will log both program information, that is the state of the program, and file information, what file is open and what changes were made. The program will log the username of the user operating it, and the current time.