NAME

Attribute::Protected - implementing proctected methods with attributes

SYNOPSIS

package SomeClass;
use Attribute::Protected;

sub foo  :Public    { }
sub _bar :Private   { }
sub _baz :Protected { }

sub another {
    my $self = shift;
    $self->foo;		# OK
    $self->_bar;		# OK
    $self->_baz;		# OK
}

package DerivedClass;
@DerivedClass::ISA = qw(SomeClass);

sub yetanother {
    my $self = shift;
    $self->foo;		# OK
    $self->_bar;		# NG: private method
    $self->_baz;		# OK
}

package main;

my $some = SomeClass->new;
$some->foo;		# OK
$some->_bar;		# NG: private method
$some->_baz;		# NG: protected method

DESCRIPTION

Attribute::Protected implements something like public / private / protected methods in C++ or Java.

ATTRIBUTES

Public
sub foo :Public { }

just a mark. Can be called from everywhere.

Private
sub _bar :Private { }

Can't be called from outside the class where it was declared.

Protected
sub _baz :Protected { }

Can be called from the class where it was declared or its derived classes.

When called from inappropriate classes, those methods throw an exception like foo() is a protected method of Foo!.

AUTHOR

Tatsuhiko Miyagawa, <miyagawa@bulknews.net>

SEE ALSO

Attribute::Handlers, Protect, Class::Fields