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, SEE ALSO the Attribute::Handlers manpage, the Protect manpage, the Class::Fields manpage