Re: Help! Strings -> Numbers
[email protected] ("Dave Whipp") Thu, 21 Nov 2002 11:49:26 -0800
| Newsgroups | perl.perl6.documentation |
|---|---|
| Organization | Fast-Chip inc. |
| Message-ID | <[email protected]> |
"Michael Lazzaro" <[email protected]> wrote : > > 1) "Formats" as classes. What I _want_ to do is to be able to > associate a named "format" with a given class/instance/output, because > I tend to use the same few formats over and over. So if I want to > frequently output numbers as '%-4.2d', I just call it "MoneyFormat" or > something: > > [ ... snip ... ] > > and not deal with sprintf syntax at all, but still have something > that's eminently adjustable, self-documenting, and has decent > compile-time optimization possibilities. And could change, runtime, > according to user preferences. An alternative, with almost the same benefits, is $fmt{money} = "%-4.2d"; printf "The amount is: $fmt{money}\n", $v; One of the things that I like about the printf style is that the values are separated from the format. So $v can be spelt @_. > 2) An analogue to a "rule", but for output instead of input. As we can > say: > [... cut ... ] > > print "blah blah: <$i:MoneyFormat>"; The inverse-regex was discussed on perl6-language a few months back (I think the context was an alternative to pack/unpack): I don't recall any definitive conclusions. A simple proposal to pass a match object/hash as an input to the rule falls foul of too many reverse ambiguities. But a constrained regex syntax could be made to work. For your specific example, the following is probably valid syntax: print "blah blah $( Money.fmt $v )\n"; (assuming a class-method named fmt on the Money class). If Money were a rule, insead of a class, then a similar thing might work. If $v were of type Money, then Money's AS_STRING method could be over-ridden for the interpolation. I guess that's how the fmt property would be implemented: it creates a run-time subclass that overrides the method. Dave.