[Chicago-talk] default methods

Steven Lembark lembark at wrkhors.com
Mon Jul 26 23:08:13 CDT 2004



-- Jim Thomason <thomasoniii at gmail.com>

> AUTOLOAD.
>
> package MyClass;
>
> sub AUTOLOAD {
>   goto &defaultHandler;
> }

Why have a default handler if you have an AUTOLOAD in the
first place? The main use would be something that installs
a newly minted subroutine, e.g.,

    sub AUTOLOAD
    {
        my $name = (split /::/, $AUTOLOAD)[-1];

        my obj = $_[0];

        my $sth = $dbh->prepare( $obj->{$name} );

        my $sub =
        sub
        {
            my $obj = shift;
            eval
            {
                # caller gets back undef (false) on
                # failure or the result of the query
                # (which may be undef).

                $sth->execute( @_ );
                $sth->fetchall_arrayref
            }
        };

        # where symbolic ref's Do the Deed (tm).

        {
            no strict 'refs';
            *$AUTOLOAD = $sub;
        }

        # doublecheck my syntax on this, it may be
        # just *AUTOLOAD or require braces -- the
        # camel has a working example.

        goto &*AUTOLOAD
    }


i.e., if the object contains a key with the name of your
called subroutine then treat it as sql, prepare a statement
handle, construct a closure on it, install it as
the subroutine to call that statement handle, then dispatch
to it with the current arguments.

This is how the .al items work; see also the Shell module.

-- 
Steven Lembark                           9 Music Square South, Box 344
Workhorse Computing                                Nashville, TN 37203
lembark at wrkhors.com                                     1 888 359 3508



More information about the Chicago-talk mailing list