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

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

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