NAME
Text::Roman - Allows conversion between Roman and Arabic algarisms.
VERSION
version 3.5
SYNOPSIS
#!/usr/bin/env perl
use strict;
use warnings;
use Text::Roman qw(:all);
print int2roman(123), "\n";
my $roman = "XXXV";
print roman2int($roman), "\n" if isroman($roman);
my $milhar = 'L_X_XXIII'; # = 60,023
print milhar2int($milhar), "\n" if ismilhar($milhar);
DESCRIPTION
This package supports both conventional Roman algarisms (which range
from *1* to *3999*) and Milhar Romans, a variation which uses a bar
across the algarism to indicate multiplication by *1_000*. For the
purposes of this module, acceptable syntax consists of an underscore
suffixed to the algarism e.g. IV_V = *4_005*. The term Milhar apparently
derives from the Portuguese word for "thousands" and the range of this
notation extends the range of Roman numbers to *3999 * 1000 + 3999 =
4_002_999*.
Note: the functions in this package treat Roman algarisms in a
case-insensitive manner such that "VI" == "vI" == "Vi" == "vi".
The following functions may be imported into the caller package by name:
FUNCTIONS
isroman
Tests a string to be a valid Roman algarism. Returns a boolean value.
int2roman
Converts an integer expressed in Arabic numerals, to its corresponding
Roman algarism. If the integer provided is out of the range expressible
in Roman notation, an *undef* is returned.
roman2int
Does the converse of "int2roman", converting a Roman algarism to its
integer value.
ismilhar
Determines whether a string qualifies as a Milhar Roman algarism.
milhar2int
Converts a Milhar Roman algarism to an integer.
ismroman/mroman2int/roman
These functions belong to the module's old interface and are considered
deprecated. Do not use them in new code and they will eventually be
discontinued; they map as follows:
* ismroman => ismilhar
* mroman2int => milhar2int
* roman => int2roman
CHANGES
Some changes worth noting from this module's previous incarnation:
*namespace imports*
The call to use must now explicitly request function names imported
into it's namespace.
*argument defaults/void context*
All functions now will operate on $_ when no arguments are passed,
and will set $_ when called in a void context. This allows for
writing code like:
@x = qw/V III XI IV/;
roman2int() for @x;
print join("-", @x);
instead of the uglier:
@x = qw/V III XI IV/;
$_ = roman2int($_) for @x;
print join("-", @x);
SPECIFICATION
Roman algarisms may be described using the following BNF-like formula:
a = I{1,3}
b = V\a?|IV|\a
e = X{1,3}\b?|X{0,3}IX|\b
ee = IX|\b
f = L\e?|XL\ee?|\e
g = C{1,3}\f?|C{0,3}XC\ee?|\f
gg = XC\ee?|\f
h = D\g?|CD\gg?|\g
j = M{1,3}\h?|M{0,3}CM\gg?|\h
REFERENCES
For a description of the Roman numeral system see:
<http://www.novaroma.org/via_romana/numbers.html>. A reference to Milhar
Roman alagarisms (in Portuguese) may be found at:
<http://web.archive.org/web/20020819094718/http://www.estado.com.br/reda
c/norn-nro.html>.
ACKNOWLEDGEMENTS
This module was originally written by Peter de Padua Krauss and
submitted to CPAN by Stanislaw Pusep <https://metacpan.org/author/SYP>
who has relinquished control to Erick Calder
<https://metacpan.org/author/ECALDER> since the original author has
never maintained it and can no longer be reached.
Erick have completely rewritten the module, implementing simpler
algorithms to perform the same functionality, adding a test suite, a
Changes file, etc. and providing more comprehensive documentation.
Ten years later, Stanislaw returned as a maintainer.
AUTHOR
Stanislaw Pusep <stas@sysd.org>
COPYRIGHT AND LICENSE
This software is copyright (c) 2003 by Erick Calder <ecalder@cpan.org>.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.