The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.


Math::Units - Unit conversion


use Math::Units qw(convert);

my $out_value = convert($in_value, 'in unit', 'out unit');


The Math::Units module converts a numeric value in one unit of measurement to some other unit. The units must be compatible, i.e. length can not be converted to volume. If a conversion can not be made an exception is thrown.

A combination chaining and reduction algorithm is used to perform the most direct unit conversion possible. Units may be written in several different styles. An abbreviation table is used to convert from common long-form unit names to the (more or less) standard abbreviations that the units module uses internally. All multiplicative unit conversions are cached so that future conversions can be performed very quickly.

Too many units, prefixes and abbreviations are supported to list here. See the source code for a complete listing.


I beleive this module has great potential, if you have any ideas or patches feel free to submit them to

'units' program test like 'gunits'

other tests

POD about what units/abbr/etc can be used with the function

general cleanup

Mr. Fox's original TODO:

1. There should be a set of routines for adding new unit formulas, reductions and conversions.

2. Some conversions can be automatically generated from a reduction. (This has to be done carefully because conversions are bi-directional while reductions *must* be consistently uni-directional.)

3. It would be nice to simplify the default conversions using the yet-to-be-written solution to #2.

4. There are many units (several in the GNU unit program for example) that aren't defined here. Since I was (un)fortunately born in the U.S., I have a(n) (in)correct belief of what the standard units are. Please let me know if I've messed anything up!


print "5 mm == ", convert(5, 'mm', 'in'), " inches\n"; print "72 degrees Farenheit == ", convert(72, 'F', 'C'), " degrees Celsius\n"; print "1 gallon == ", convert(1, 'gallon', 'cm^3'), " cubic centimeters\n"; print "4500 rpm == ", convert(4500, 'rpm', 'Hz'), " Hertz\n";