The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

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