Tatsuhiko Miyagawa > Attribute-Protected > Attribute::Protected

Download:
Attribute-Protected-0.03.tar.gz

Dependencies

Annotate this POD

CPAN RT

New  2
Open  0
View/Report Bugs
Module Version: 0.03   Source  

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 ^

Attribute::Handlers, protect, Class::Fields

syntax highlighting: