This and other RFCs are available on the web at
  http://dev.perl.org/rfc/

=head1 TITLE

Object Class hooks into C<printf>

=head1 VERSION

  Maintainer: Mark Biggar <[EMAIL PROTECTED]>
  Date: 30 Aug 2000
  Mailing List: [EMAIL PROTECTED]
  Version: 1
  Number: 180

=head1 ABSTRACT

There needs to be a way for an object class to define C<printf> format
specifiers for use in formatting objects into strings with C<printf> and
C<sprintf>.

=head1 DESCRIPTION

It would be nice to be able to do things like:

   use BigInt ':constant';
    
   printf "%53d",(3**34);

and get a nicely formatted output.

This could also simplify other proposals like RFC 48 where instead of
cluttering up the proposed C<date> and C<gmtdate> operators with C<POSIX
strftime()> functionality, it could be done using C<printf> instead.

=head1 IMPLEMENTATION

I have thought of two possible implementations:

1) When ever a blessed object reference appears in a C<printf> argument list
the internal C<printf> code invokes the objects C<STRING> method (see RFC 49)
with an extra argument consisting of the printf format specifier (in the above
example the extra argument would be "%53d".  The C<STRING> method would return
either a properly formatted string scalar which would be incorporated in the
output string being constructed by C<printf> or C<undef>, if the C<STRING>
method does not understand the specifier, which should probably cause an
exception to be thrown.

2) When ever a blessed object reference appears in s C<printf> argument list
the internal C<printf> code attempts to invoke the objects C<PRINTF_spec>
method with an extra argument consisting of the inside of the C<printf>
specifier (in the above example anon-ref->PRINTF_d("53") would be invoked.  If
the method exists then it returns a properly formatted string scalar or
C<undef> if it can not interpreted the specifier argument.  If either C<undef>
is returned or there is no such method then a exception is thrown.

=head1 REFERENCES

RFC 49 Objects should have builtin stringifying STRING method

RFC 48 Replace localtime() and gmtime() with date() and gmtdate()


Reply via email to