Acme-Roman
view release on metacpan or search on metacpan
lib/Acme/Roman.pm view on Meta::CPAN
sub is_roman {
return "" if $_[0] =~ /[^IVXLCDM]/; # false: accept nothing but uppercase
return Roman::isroman(shift);
}
sub new {
my $proto = shift;
my $arg = shift;
if ( $arg =~ /^\d+$/ ) { # looks like an arabic number
croak __PACKAGE__, " does not like numbers above 3999" if $arg > 3999;
return $proto->SUPER::new( { roman => Roman::Roman($arg), num => $arg } );
} elsif ( Roman::isroman($arg) ) {
return $proto->SUPER::new( { roman => $arg, num => Roman::arabic($arg) } );
} else {
croak "$arg does not look like a (roman or arabic) number";
}
}
sub plus {
my $r1 = shift;
my $r2 = shift;
my $num1 = ref $r1 ? $r1->num : is_roman($r1) ? to_number($r1) : $r1;
my $num2 = ref $r2 ? $r2->num : is_roman($r2) ? to_number($r2) : $r2;
( run in 1.137 second using v1.01-cache-2.11-cpan-49f99fa48dc )