home: http://starling.us/tet
by Ĝan Ŭesli Starling
copyright 2006 — 2007
Herein I present my own collection of Perl modules mostly not available elsewhere inasmuch as I have yet to upload all but one of them to CPAN
. There are two causes for this. The first is lack of time. The second is that apparently I do not yet fully grok how to write proper tests for CPAN
modules. That is to say, my first CPAN
effort Chart::EPS_graph.pm
, although I use it frequently on both NetBSD UNIX
and Win32
without any slightest problem, reportedly fails certain (to me) obscure tests by CPANTS
(the CPAN Testing Service). Nor do I grok their automated report of to address those issues. My CPANTS
kwalitee rating is therefor only 70.83% while I remain temporarily clueless as to the reason. Alas and alack.
So...until I manage enough spare time to sort that out, and partly out of the wish to avoid further CPANTS
humiliation, I'll be stockpiling any new modules which I write here. If they have dependencies not available elsewhere, those too I will include here.
As for quality (as opposed to kwalitee) know that in my own judgement all these modules are suitable for general use anywhere throughout the Programming Republic of Perl. I do have some others, absent from here, which are not yet ready for public exposure. So these are my best ones. In my own use, these have all performed flawlessly. All are released according to the Perl artistic license. So do whatever you like with them.
Note: Perl newbies read on (all others skip). My modules are all pure Perl, which is to say ASCII text files. Installation consists of nothing more than opening a Perl as TXT
link in your browser, selecting the complete text, copying and pasting same into any ASCII text editor, then saving into the designated "save to" path.
Note that the designated save to path always looks like lib/foo/bar
or something similar. The starting location of lib/
could be any place that Perl might search when looking to load a module. Thus, in theory, you could type the following into a CLI (aka command line instruction) window...
perl -e "use Foo;"
...which would fail with a complaint telling you all the places Perl looked for the non-existent module Foo
and locate your modules starting in any one of those instead of starting in lib/
. In fact, one of the listed directories will be the acutal lib/
which we seek. Alternately you could just browse the varied Perl directories in search of one named similar to either of the following...
C:/Perl/site/lib
/usr/pkg/lib/perl5/site_perl/5.8.0/lib
...whatever similar path your own Perl installation uses for modules downloaded from CPAN
. You must also, of course, name each file as recommended at the download link when saving them. And, of course, if a module path is described as lib/foo/bar.pm
yet directory foo
does not already exist in lib/
then you will have to create that directory.
Since this is not CPAN
, module dependencies do not auto-install themselves. Any module having another module as a dependency will be so noted in the module's own POD
(acronym forPlain Old Documentation) which you may view from this site as HTML
. And, of course, you could find that out almost as easily by looking for a statement like use Foo::Bar.pm
or similar near to the top within the Perl code itself.
The vast majority of all such dependencies will be either Perl core modules CPAN
modules installable in the regular way. The very few others, if any, will all be available here. A single, partial exception exists. This has to do with one module's CPAN
version not being the latest. That single case, although minor, is noted as a "Caveat:" at the top of its explanitory section on this page.
I design for and test on both NetBSD
and WinXP
. Thus, accordingly, all but one of these modules work cross-platform. The single exception is due to its own CPAN dependency, Device::LabJack
, not being available (yet) for NetBSD
. Reportedly, though, they do have it for LINUX
. And its author has offered to make it available for Mac OS X
. But I have no means for testing those.
Version numbering is for tracking purposes only. It is not a judgement upon the worthiness of said software. Commercial vendors regularly employ it thus...it in the sense of a pre/post beta-release numbering sequence. But after then commercial version 2.0
only means they were short on revenue and need an excuse to pick your pocket once again. I observe that many a writer of open source software ignores that framework. Those who don't, like the early releases of LINUX
sometimes end up with a zillion sub-relases between 0.9
and 1.0
for no better reason than an excess of optimism in guessing the illusive 1.0
benchmark. Meanwhile they will have hopped and skipped forward such that from 0.04
to 0.20
there may have been no releases at all in between. This is irrational. I elect to follow rather more sane examples.
So you should not hold your breath in hopes of a release labled $VERSION = 1.00;
. With luck it will never happen because that would be a very bad thing. I choose to follow the more rational example of a wholly sane numbering scheme, one which mandates that the first, plural-copy distribution 0.01
on account of said software having existed as but a single copy. I will have kept it under wraps until completely satisfied. Only thereafter does there arise any motive to duplicate it for distribution. And only then, with multiple copies strewn about does it become problematic to know which is which. Prior till then it needed no version number at all. But from that point forward version numbering becomes crucial.
Accordingly, none of my efforts will enter into public awareness as versions higher than 0.01
except for in a very few cases where I may have circulated them privately for some reason or other. Up until then I will not have allowed for multiple copies 0.02
and so forth. Such a new release as 0.02
might include whole new additional features but none of the prior ones will be thereby broken.
Never until such time as I make nasty and dramatic changes which break the original API 1.00
. Withdrawl of a previously existing feature would constitute such an API fracture. Big, ugly things like that... Minor changes after then will be numbered 1.01
and so forth. Not until I cruelly abuse my users again will the release number rise to 2.00
.
Scope of Use: Graphing.
Description: Creates graphs having dual Y-axes using PostScript.
Status: Uploaded to CPAN
Caveat: CPANTS reports my kwalitee at only 70.83 even though the module works flawlessly whenever I test it myself. The CPANTS automated report on how to improve said kwalitee eludes my poor comprehension. That said, try CPAN first, but fall back to downloading from here if problems arise.
The more generally useful Perl module GD::Graph::Lines
does not allow for more than one trace per axis when displaying in dual Y-axis mode. Thus you can only show two traces whereas I most usually need multiple traces for each. This module handles that. The reason it works via EPS is because I ported all the routines from an older program which I had written entirely in PostScript.
CPAN:
HTML
Here is probably the best place to get this, in the usual CPAN way. Otherwise, see links below.
Module:
POD as HTML
Perl as TXT
Save to path lib/Chart/EPS_graph.pm
then call as use Chart::EPS_graph;
in scripts.
Module:
POD as HTML
Perl as TXT
Save to path lib/Chart/EPS_Graph/PS.pm
and forget about it.
Module:
POD as HTML
Perl as TXT
Save to path lib/Chart/EPS_graph/Test.pm
where it serves as the module's own test. Useful also as an example.
Used In:
XML
Script gus_tek_csv_merge.pl
merges and graphs a pair of Tektronix TEK0000*.CSV
data files.
Scope of Use: Data Acquisition.
Description: Object Oriented Interface
Status: Not yet on CPAN
Caveat: Dependent upon Device::LabJack
which is Win32 only. Some features also dependent upon Device::LabJack
being version 0.03 or higher, which its author has not yet uploaded to CPAN.
I employ the LabJack as a data acquisition and control unit for simple laboratory testing.
Module:
POD as HTML
Perl as TXT
Save to path lib/Device/LabJack/Control.pm
then call as use Device::LabJack::Control;
in scripts.
Module:
POD as HTML
Perl as TXT
Save to path lib/Device/LabJack/Control_test.pl
where it serves as the module's own test. Useful also as an example.
Scope of Use: General.
Description: Munging CSV files
Status: Not yet on CPAN
Tektronix o'scopes and other devices save data as *.csv
files. In order to write reports on said data, I employ Perl scripts to munge them first.
Module:
POD as HTML
Perl as TXT
Save to path lib/Text/CSV/Munge.pm
then call as use Text::CSV::Munge;
in scripts.
Module:
POD as HTML
Perl as TXT
Save to path lib/Text/CSV/Munge/Strain.pm
then call as use Text::CSV::Munge::Strain;
in scripts.
Module:
POD as HTML
Perl as TXT
Save to path lib/Text/CSV/Munge/Test.pm
where it serves as the module's own test. Useful also as an example.
Used In:
XML
Script which merges and graphs a pair of Tektronix TEK0000*.CSV
data files.
Scope of Use: General.
Description: Quick and dirty Perl/Tk GUI builder.
Status: Not yet on CPAN
Many a Perl script run quite well without any GUI. A Perl hacker will quite often even prefer that there be no GUI. Yet to share one's Perl scripts with (as yet) Perl-ignorant cohorts a GUI is pretty much required. Here is a way to bang out quick and dirty Perl/Tk GUI's which you may either embed into your Perl scripts, permanently GUI-ifying them, or else build an outboard GUI to emulate the CLI call so that your Perl script might remain GUI-free.
Module:
POD as HTML
Perl as TXT
Save to path lib/Tk/EasyGUI.pm
then call as use Tk::EasyGUI;
in scripts.
Example:
POD as HTML
Perl as TXT
Save anywhere as gus_example_easy_gui.pl
Example:
Screenshot
Screenshot
Showing tests on NetBSD
and WinXP
Used In:
XML
Script gus_barometric_pressure.pl
provided with embeded GUI.
Used In:
XML
GUI-less script gus_calc_generic.pl
provided with outboard GUI.
Used In:
XML
GUI-less script gus_tek_csv_merge.pl
provided with outboard GUI.