There's more than one way to do things | |
PerlMonks |
comment on |
( [id://3333]=superdoc: print w/replies, xml ) | Need Help?? |
I just released to CPAN a distribution named Acme-Roman.
(It's propagating yet, so maybe you can't reach immediately from your
favourite CPAN mirror.) As an
Acme module, it is a simple experience to allow using roman
numerals in Perl programs in a straightforward manner.
That was done with a bit of overload, AUTOLOAD and a part which I am not satisfied with. Some digression first. The idea came to me a long time ago from the solution to a Ruby quiz, namely Ruby Quiz - Roman Numerals (#22)(See the hightlighted solution at the Quiz Summary in the same page.) The trick in Ruby was done by defining strategic methods method_missing (which is kind of Perl AUTOLOAD) and const_missing. The Perl solution was quite natural, and I got to the point where worked fine. But when I left the parentheses, it only barfed at me with and which revealed the barewords were not resolved with the provided AUTOLOAD. I learned that if I provided an empty protoype it worked. And that's how I coded -- but that kind of sucks: I need to define the prototype of 3999 subs (I .. MMMCMXCIX) to make it work. I think that's too expensive. (Who would like to play with an Acme module which is as heavy as a useful module? ;-) The Ruby solution is helped by the availability of const_missing method functionality. The equivalent in Perl would be to overload barewords, but overload documentation says: Barewords are not covered by overloaded string constants. Does anyone have any suggestion to make this lazier? Or a different way to implement that? In reply to AUTOLOAD, overload, and Roman numerals for Perl by ferreira
|
|