יובל קוג'מן (Yuval Kogman) > Devel-Sub-Which-0.05 > Devel::Sub::Which

Download:
Devel-Sub-Which-0.05.tar.gz

Dependencies

Annotate this POD

View/Report Bugs
Module Version: 0.05   Source  

NAME ^

Devel::Sub::Which - Name information about sub calls à la "can" in UNIVERSAL and <which(1)>.

SYNOPSIS ^

        {
                # inject 'which' into a class:
                package Foo;
                use Devel::Sub::Which qw(which);
        }

        # or into UNIVERSAL (best avoided except as a temporary measure)
        use Devel::Sub::Which qw(:universal);


        # introspect like this:
        $obj->which("foo"); # returns the name of the sub that
                            # will implement the "foo" method

        # or like this:
        Devel::Sub::Which::which( $obj, "foo" );


        # which is equivalent to:
        my $code_ref = $obj->can("foo");
        Devel::Sub::Which::which($code_ref);

DESCRIPTION ^

I don't like the perl debugger. I'd rather print debug statements as I go along, mostly saying "i'm going to do so and so", so I know what to look for when stuff breaks.

I also like to make extensive use of polymorphism. Due to the richness of Perl's OO, we have multiple inheritence, delegations, runtime generated classes, method calls on non predeterminate values, etc, and it often makes sense to do:

        my $method = "foo";;

        debug("i'm going to call $method on $obj. FYI, it's going to be "
                . $obj->which($method));

        $obj->$method()

In order to figure out exactly which definition of $method is going to be invoked. This helps the above debugging style by providing more deterministic reporting.

METHODS ^

OBJ->which( METHOD )

This method determines which subroutine reference will be executed for METHOD, using UNIVERSAL::can (or any overriding implementation),

You can get this method by importing it as a function into a class, or using the :universal export.

FUNCTIONS ^

which OBJ METHOD
which CODEREF

The first form has the same effect as OBJ->which(METHOD), and the second form just delegates to Sub::Identify

EXPORTS ^

Nothing is exported by default.

This module uses Sub::Exporter, so exports can be renamed, etc.

:universal

This causes which to become a method in UNIVERSAL, so that you can call it on any object.

which

You can import this into a class and then use it as a method.

ref_to_name

Provided for compatibility. Just use Sub::Identify.

ACKNOWLEGEMENTS ^

Yitzchak Scott-Thoennes provided the know-how needed to get the name of a sub reference. I've since switched to using Sub::Identify, which abstract those details away.

VERSION CONTROL ^

This module is maintained using Darcs. You can get the latest version from http://nothingmuch.woobling.org/Devel-Sub-Which/, and use darcs send to commit changes.

AUTHOR ^

Yuval Kogman <nothingmuch@woobling.org>

COPYRIGHT & LICENSE ^

        Copyright (c) 2004 Yuval Kogman. All rights reserved
        This program is free software; you can redistribute
        it and/or modify it under the same terms as Perl itself.

SEE ALSO ^

Sub::Identify, DB, perldebug, UNIVERSAL, B

syntax highlighting: