The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

UNIVERSAL::which - tells fully qualified name of the method

VERSION

$Id: which.pm,v 0.6 2007/05/15 16:01:20 dankogai Exp dankogai $

SYNOPSIS

  use UNIVERSAL::which;
  use Some::Sub::Class; # which inherits lots of modules
  # ....
  my $o   = Some::Sub::Class->new;
  # in scalar context
  my $fqn = $o->which("method");
  # in list context
  my ($pkg, $name) = $o->which("method");
  # as function
  my $fqn = UNIVERSAL::which('Some::Sub::Class', 'method');

DESCRIPTION

UNIVERSAL::which provides only one method, which.

As the name suggests, it returns the fully qualified name of a given method. Sometimes you want to know the true origin of a method but inheritance and AUTOLOAD gets in your way. This module does just that.

t/*.t illustrates how UNIVERSAL::which behaves more in details.

CAVEAT

Consider the code below;

  no warnings 'once';
  package Foo;
  my $code = sub { 1 };
  package Bar;
  *muge = $code;

In this case, you get undef for $fq = Bar>which('muge') while ($pkg, $name) = Bar->which('muge') is ('Foo', '__ANON__').

That way the code snippet works as expeted.

  my $fq = Bar->which('muge'); &$fg if $fg;

if you get 'Bar::__ANON__' instead, perl will croak on you at the 2nd line.

SEE ALSO

perlobj, UNIVERSAL::canAUTOLOAD

AUTHORS

Dan Kogai, <dankogai at dan.co.jp> http://search.cpan.org/~dankogai/

Original idea seeded by: TANIGUCHI http://search.cpan.org/~taniguchi/

B::svref_2object trick by: HIO http://search.cpan.org/~hio/

AUTOLOAD case suggested by: DAIBA http://search.cpan.org/~daiba/

Anon. coderef bug noted by: MIYAZAKI http://search.cpan.org/~miyazaki/

COPYRIGHT AND LICENSE

Copyright (C) 2006-2007 by Dan Kogai

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.8.8 or, at your option, any later version of Perl 5 you may have available.