NAME
Data::Vitals::Circumference - A measurement of the circumference around part of the human body.
DESCRIPTION
The Data::Vitals::Height package provides an implementation of the height of a person.
This can be taken by standard backwards against wall or other vertical surface with your heels, seat, shoulders, and head touching the surface. You should be standing straight with your head in a horizontal position.
A rule is placed horizontally and gently pressed down into the hair, so that it presses on the skull. The point at which the rule contacts the wall is noted, and then measured down to the floor.
The "Height String"
For height, measurements in both "feet and inches" and centimetres are widespread, and we try to support them both where the intent is obvious.
Any imperial measurement MUST contain two parts, and indicate at least the "feet" indicator. The one case of input without the unit specificier we allow is any single two or three digit number, which is taken to mean centimetres.
For metric, the supported input range is 30cm - 300cm. For imperial, it is 1'0" - 8'11". This range ignores very small babies but is slightly larger than the world record at the top end, and so is fairly all-encompassing.
The ability to customise these legal ranges will be added at a later time.
The following shows samples for the formats accepted.
Metric measurements
180cm Default form
180.5cm Halves (and only halves) are allowed
180 Raw three digit number
95 Raw two digit number
180c Shorthand (or missed the m)
180cms Plural form
180CM Case insensitive
180 cm Whitespace between the type is ignored
Imperial Measurements
5'10" Default form
5'10 If a 'feet' indicator is given, inches is implied
5' 10 Whitespace is ignored
5'10 Various inch indicators
5'10i Various inch indicators
5'10in Various inch indicators
5'10inc Various inch indicators
5'10inch Various inch indicators
5'10inche Various inch indicators
5'10inches Various inch indidators
5'10inchs This bad spelling case is known
5f10 Various foot indicators
5ft10 Various foot indicators
5foot10 Various foot indicators
5feet10 Various foot indicators
5foot10" Indicates can be compiled any way
5FEET10 Case insensitive
5' 10" Whitespace is ignored
Storage and Conversion
Regardless of the method that the value is entered, all values are stored internally in centimetres. The default string form of all measurements is also in centimetres.
This is a specific design decision, as there is a long term world trend towards increased metrification. Many countries (such as Germany) use metric values even for the "common man's" understanding of things and people do not know their height in feet and inches.
However, to support those still dealing in inches we ensure that any value initially entered in inches (including optional halves), stored as cms, and returned to inches for presentation will ALWAYS return the original number of inches, including halves.
The conversion functions in Data::Vitals::Util are heavily tested for every possible value in the range to ensure that this is the case.
METHODS
new $height
The new
constructor takes a height string and returns a new object representing the height measurement, or undef
if there is a problem with the value provided.
Currently, there is no explanation of the reason why a value is rejected. Any used may need to just be presented with an "Invalid Value" message.
In future, a mechanism to access error messages following an error will be added.
as_string
The as_string
method returns the generic string form of the measurement.
This is also the method called during overloaded stringification. By default, this returns the metric form, which is in centimetres.
as_metric
The as_metric
method returns the metric form of the measurement, which for height measurements is always in centimetres.
as_imperial
The as_imperial
method returns the imperial form of the measurement, which for height measurements is in feet and inches
as_cms
The as_cms
method explicitly returns the measurement in centimetres.
The format of the string returned is similar to 180cm
.
as_feet
The as_feet
method explicitly returns the measurement in feet and inches.
The format of the string returned is similar to 5'10"
TO DO
- Add support for metres "1.84m"
- Add a new class as an abstract for both height, circumference, and other length measurements.
SUPPORT
Bugs should always be reported via the CPAN bug tracker
http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Data-Vitals
For other issues, contact the maintainer.
AUTHORS
Adam Kennedy <adamk@cpan.org>
ACKNOWLEGEMENTS
Thank you to Phase N (http://phase-n.com/) for permitting the open sourcing and release of this distribution.
COPYRIGHT
Copyright 2004 - 2008 Adam Kennedy.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
The full text of the license can be found in the LICENSE file included with this module.