1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157
|
NAME
Convert::Units::Base - base object for performing unit
conversions
CHANGES SINCE LAST RELEASE
0.43 Sat Jan 15 22:11:30 2000
- cleaned up sloppy syntax to remove warnings
- fixed bug with reference to default unit in Base.pm
DESCRIPTION
The Units package is a collection of modules for parsing strings
with unit measurements (such as "12pt" or "3 meters") and
converting them to some other unit (such as "picas" or
"inches").
It uses a base package (Units::Base) which does the dirty work.
Other modules define what units they handle and how they are
related.
Why a Separate Module?
It is *intentionally* distinct from the *Math::Units* module.
Why? The *Math::Units* module implies that unit conversions are
*exact*, with one-to-one relationships. This is fine for
scientific work. It's even fine for some general purpose/real-
world uses (such as converting Fehrenheight to Celcius).
Real-world measurement systems are conflicting. For instance, a
"point" in typography is equivalent to 1/72 inch, according to
PostScript specs and common usage. Other type systems consider
it 1/72.27 inch, or 0.01383 inches, or 0.0148 inches. Outside of
that context, a point may be 1/120 or 1/144 inch.
Common notations and abbreviations also depend on context. Does
"12 pt" mean "12 point", "12 parts" or "12 pints"?
Even without conflicts in the definition of a particular unit,
there's no need to convert point sizes for fonts into miles or
light-years. Typesetters, surveyors and astronomers user
different scales as well as systems.
People do not think like computers
Not everyone uses the metric system.
And even less people say things like "5.25 feet". Often it's "5
feet, 3 inches" or "5 1/4 feet".
Despite having ten fingers and toes, people don't think in tens.
They think in twos, threes, fours, twelves, and sixteens. And
sometimes they use fractional measurements like quarter-inches,
sixteenths-of-an-inch, or half-pints.
The purpose of this module is to allow people to use the
measurement systems they are familiar with, and that is
appropriate to what they are doing.
Rationale
The Units:: hierarchy is an attempt to keep measurement systems
in distinct classes. Thus one can have modules for converting
between typography units (points, picas) distinct from common
units of length (or area, temperature, etc.), specialized units
(for Astronomy, Chemistry, Physics, Textiles, Winery,
Navigation, etc.) or even traditional or regional systems
(Japanese, Chinese, Egyptian, archaic systems, etc.) and to keep
conflicting measurement systems distinct.
Release Notes
The current distribution contains the following packages:
Convert::Units::
::Base - a base module that does all of the work
::Length - a module for converting units of length
::Temperature - a module for converting units of temperature
::Type - a module for converting units of type
Units::Base by itself does nothing. Another module needs to use
it to create definitions of what units of measurement it handles
and how they are related to each other (ie, 1 m = 100 cm).
The base unit also allows for synonym and abbreviations to be
defined.
It also allows common "multiples" to be defined, so that it can
handle things like "18 half-points" or "6 dozen feet" or even
convert millimters to "sixteenths of an inch". (It does not yet
handle Greek prefixes like centi- or mega- ... those will have
to be manually defined.)
Known Issues
The current release should be considered "beta" until further
testing and refinements have been made. Then again, maybe
"alpha" is more accurate.
The current version does not yet handle fractions such as "1/2
in". It should handle decimals such as "0.5 in".
Relationships have been rewritten to be handle A(x+b) as well
Ax. They may be redone in the future to handle more complex
relationships, if the need arises.
Unit names much be defined as all lowercase, since strings are
munged with *lc()* before processing. In other words, if you
define a unit name as "F" or "Fahrenheight" you won't be able to
use it.
Future Enhancements
Aside from bug fixes, optimizations, and making the string
parsing conform more to the "manifesto" above, obvious additions
would be modules for converting between units of area, volume,
weight... (although if *Math::Units* does what you need, use
that instead.)
An example hierarchy for future modules:
Convert::Units::
::Length - general measures of length
::Area
::Pressure
::Volume
Convert::Units::Length
::Chinese - specialized regional/traditional systems
::English
Convert::Units::Astronomy
::Length - or Distance...?
Modules should share a common unit (preferably metric) to allow
for conversions.
REQUIRED MODULES
Carp
SEE ALSO
*Units::Length*, *Units::Temperature* and *Units::Type* modules,
which demonstrate how *Units::Base* is used.
AUTHOR
Robert Rothenberg <wlkngowl@unix.asb.com>
LICENSE
Copyright (c) 1999 Robert Rothenberg. All rights reserved. This
program is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.
|