NAME
Physics::Udunits2 - Perl extension to Udunits2 unit system
SYNOPSIS
use Physics::Udunits2;
my $system = new Physics::Udunits2();
my $mUnit = $system->getUnit("m");
my $kmUnit = $system->getUnit("km");
if ($mUnit->isConvertibleTo($kmUnit)) {
my $converter = $mUnit->getConverterTo($kmUnit);
foreach my $num (1..1000) {
printf("%fm = %fkm"\n, $num, $converter->convert($num));
}
}
DESCRIPTION
This is a perl interface to the udunits-2 package from unidata. The c-level api has been change to a perl OO-api, i.e.
ut_unit ut_get_unit_by_name(ut_system, name)
changes in perl to
$unit = $system->getUnitByName(name)
Lots of information can thus be retrieved from the extensive C-Api documentation of udunits2. The following gives only and excerpt:
Physics::Udunits Time handling
Times are stored in double, in the unit with the name 'second'. With the following functions, times can be converted from a calendar to that double. These function can be imported with the ':all' tag.
- encodeTime($year, $month, $day, $hour, $minute, $second)
-
All values are integer, except second. Year are (usually) 4 numbers, $month is between 1 and 12, day between 1 and 31, hour between 0 and 23, minute between 0 and 59 and seconds between 0 and 59.999999
- encodeDate($year, $month, $day)
- encodeClock($hour, $minute, $second)
-
encodeClock + encodeDate = encodeTime
- decodeTime($timeDouble)
-
return ($year, $month, $day, $hour, $minute, $second)
Time Conversion Example
use Physics::Udunits2 qw(:all);
my $system = new Physics::Udunits2();
my @time = (1973, 6, 26, 9, 51, 0);
my $baseTime = encodeTime(@time);
my $tUnit = $system->getUnit("minutes since 1973-06-26 00:00:00");
my $baseTimeUnit = $system->getUnitByName("second");
print $baseTimeUnit->getConverterTo($tUnit)->convert($baseTime); # writes 591.000000xxx = 9*60 + 51 + (fractalSeconds)
Physics::Udunits2::System
Methods of Physics::Udunits2::System:
- new Physics::Udunits2([$path])
-
retrieve a Physics::Udunits2::System ($system) from the file-system, if path is left empty, retrieve the default.
- getUnit($unitString)
-
parse the unitString and return Physics::Udunits2::Unit, in 99% of all cases, you want to use this function
- getUnitByName($unitName)
-
retrieve a unit by the exact unitName
- getUnitBySymbol($symbolName)
-
retrieve a unit by the exact base-symbol (km will not work)
- newBaseUnit
-
retrieve a new unit
- newDimensionlessUnit
Physics::Udunits2::Unit
After retrieving a unit from a system, you call the following methods:
Converter
- isConvertibleTo($otherUnit)
-
Check if units are convertible, return true on success. Throws if units are from different systems.
- getConverterTo($otherUnit)
-
Retrieve a Physics::Udunits2::Converter, to convert from one unit to another. Throws if units are not convertible, or from different systems.
Unit Operations
The following unit operation methods all return a new unit
- scale($numberScale)
- offset($numberOffset)
- offset_by_time($numberTime)
- invert()
- raise($intPower)
- root($intRoot)
- log($numberBase)
- multiply($unit2)
- divide($unitDenominator)
- clone()
Unit Information
- getName()
-
return the name or undef
- getSymbol()
-
return the symbol or undef
- sameSystem($otherUnit)
-
check if units are from the same system.
- isDimensionless()
- getSystem()
- compare($otherUnit)
-
return a value < 0, 0 or > 0, if the unit is <, = or > the otherUnit. The units need to be convertible.
Physics::Udunist2::Converter
A converter should be fetched from a Physics::Udunits2::Unit
EXPORT
None by default. Tag ':all' gives:
- encodeTime
- encodeDate
- encodeClock
- decodeTime
EXCEPTIONS
All errors internal to udunits are thrown with croak. Those are usually either programming errors, or system errors. When retrieving units from a system,
SEE ALSO
http://www.unidata.ucar.edu/software/udunits/
AUTHOR
Heiko Klein, <Heiko.Klein@met.no>
COPYRIGHT AND LICENSE
Copyright (C) 2009 by Heiko Klein
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.8.8 or, at your option, any later version of Perl 5 you may have available.