++Fatvamp, cool code! With a long string of empty-block elsifs, you could also write the code using or or ||, like the following. Good work.
my $str = uc shift @_;
$str =~ s/XLVIII$/IL/ or
$str =~ s/VIII$/IX/ or
$str =~ s/III$/IV/ or
$str =~ s/DCCCXCIX$/CM/ or
$str =~ s/CCCXCIX$/CD/ or
$str =~ s/LXXXIX$/XC/ or
$str =~ s/XXXIX$/XL/ or
$str =~ s/(I{1,2})$/$1I/ or
$str =~ s/CDXCIX$/D/ or
$str =~ s/CMXCIX$/M/ or
$str =~ s/XCIX$/C/ or
$str =~ s/I([VXLCDM])$/$1/ or
$str =~ s/([VXLCDM])$/$1I/;
return $str;
| [reply] [Watch: Dir/Any] [d/l] |
For those interested in doing more "real" roman numeral operations, Math::Roman handles much of this for you:
use Math::Roman 'roman';
my $y = roman 'MCMLXXVII';
print "$y\n" while $y++ < 2002;
| [reply] [Watch: Dir/Any] [d/l] |
Hi,
I contacted the author of the Math::Roman module and reported
some bugs, so the 1.07 should be usable now. The big difference in the approach, is the symbolic operation and not internal transformations to/from another nuber system/scheme.
Try to increment the 'IM' number with the Math::Roman module...
BTW: The symbolic approach lets you (though expensive operation) guess what roman number xy probably is, though its in a wrong format.
Most probably we'll merge the best of both worlds in a later Math::Roman version.
Bye
PetaMem
| [reply] [Watch: Dir/Any] |
| [reply] [Watch: Dir/Any] |