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!.

THOUGHT

  • attributes (public, private and proteced) should be lowercased?

AUTHOR

Tatsuhiko Miyagawa <miyagawa@bulknews.net>

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

SEE ALSO

Attribute::Handlers, Protect, Class::Fields