use Scalar::Util 'blessed';
-our $VERSION = '0.08';
+our $VERSION = '0.10';
# this is our global stash of both
# MRO's and method dispatch tables
delete ${"${class}::"}{"()"} if $MRO{$class}->{has_overload_fallback};
foreach my $method (keys %{$MRO{$class}->{methods}}) {
delete ${"${class}::"}{$method}
- if \&{"${class}::${method}"} eq
- $MRO{$class}->{methods}->{$method}->{code};
+ if defined *{"${class}::${method}"}{CODE} &&
+ (*{"${class}::${method}"}{CODE} eq $MRO{$class}->{methods}->{$method}->{code});
}
}
sub method {
my $level = 1;
- my $method_caller;
+ my ($method_caller, $label, @label);
while ($method_caller = (caller($level++))[3]) {
- last unless $method_caller eq '(eval)';
+ @label = (split '::', $method_caller);
+ $label = pop @label;
+ last unless
+ $label eq '(eval)' ||
+ $label eq '__ANON__';
}
- my @label = (split '::', $method_caller);
- my $label = pop @label;
my $caller = join '::' => @label;
my $self = $_[0];
my $class = blessed($self) || $self;
---------------------------- ------ ------ ------ ------ ------ ------ ------
File stmt bran cond sub pod time total
---------------------------- ------ ------ ------ ------ ------ ------ ------
- Class/C3.pm 98.6 88.6 75.0 96.0 100.0 70.4 95.2
+ Class/C3.pm 98.6 90.9 73.3 96.0 100.0 96.8 95.3
---------------------------- ------ ------ ------ ------ ------ ------ ------
- Total 98.6 88.6 75.0 96.0 100.0 70.4 95.2
+ Total 98.6 90.9 73.3 96.0 100.0 96.8 95.3
---------------------------- ------ ------ ------ ------ ------ ------ ------
=head1 SEE ALSO
=back
+=head1 ACKNOWLEGEMENTS
+
+=over 4
+
+=item Thanks to Matt S. Trout for using this module in his module L<DBIx::Class>
+and finding many bugs and providing fixes.
+
+=item Thanks to Justin Guenther for making C<next::method> more robust by handling
+calls inside C<eval> and anon-subs.
+
+=back
+
=head1 AUTHOR
Stevan Little, E<lt>stevan@iinteractive.comE<gt>
=head1 COPYRIGHT AND LICENSE
-Copyright 2005 by Infinity Interactive, Inc.
+Copyright 2005, 2006 by Infinity Interactive, Inc.
L<http://www.iinteractive.com>