CURRENT - Alias of current class


CURRENT documentation Contained in the CURRENT distribution.

Index


Code Index:

NAME

Top

CURRENT - Alias of current class

SYNOPSIS

Top

    package LONG::LONG::LONG::LONG::Class;

    require CURRENT;

    sub _my_method {}

    $self->CURRENT::_my_method();
    # same as
    $self->LONG::LONG::LONG::LONG::Class::_my_method();

DESCRIPTION

Top

CURRENT.pm adds class CURRENT. When a method m is called as $self->CURRENT::m, __PACKAGE__::m is called.

Note that CURRENT only supports calling method.

This helps calling a local method in a long name class.

CURRENT.pm supports AUTOLOAD, also.

AUTHOR

Top

Yuji Tamashiro, <yuji@tamashiro.org>

COPYRIGHT AND LICENSE

Top


CURRENT documentation Contained in the CURRENT distribution.

package CURRENT;

use strict;
use vars qw( $VERSION );
use Carp;

$VERSION = '0.01';

sub AUTOLOAD {
    my ($self) = @_;

    my $caller_class = caller;
    my ($wanted_method) = $CURRENT::AUTOLOAD =~ m{.*::(.*)}g;

    my $object_method = $caller_class->can($wanted_method);
    goto $object_method if $object_method;

    if ( my $autoload = $caller_class->can('AUTOLOAD') ) {
        require B;
        my $autoload_class = B::svref_2object($autoload)->GV->STASH->NAME;

        no strict 'refs';
        ${"${autoload_class}::AUTOLOAD"} = "${caller_class}::$wanted_method";

        goto $autoload;
    }

    croak(
        qq{Can't locate object method "$wanted_method"},
        qq{ via package "$caller_class"},
    );
}

1;
__END__