"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.