Attribute::Protected - implementing proctected methods with attributes


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, protect, the Class::Fields manpage