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 <[email protected]>

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

SEE ALSO
   the Attribute::Handlers manpage, the Protect manpage, the Class::Fields
   manpage